본문 바로가기

카테고리 없음

DIVA 4단계

#0. 학습 목표

가. 코드 해석을 빠르게 하도록 디바의 코드 한 줄 한 줄이 무슨 의미인지 알기. 

나. 나중에 비슷한 코드를 봤을 때 취약점인 줄 알도록 취약점 있는 코드와 취약점 원인인 라인알기, 보호기법이 씌워진 코드와 비교하기

#1 문제 분석

가. 목적

민감정보가 어디에서 어떻게 저장되고 취약한 코드가 어디있는지 알기

나. 활용

소스코드, adb

 

#2 취약점 정보

가. 취약점

myuser라는 테이블에 VARCHAR형의 user, passwd라는 이름으로 저장된다는 것을 알 수 있다.

 

나. 민감정보가 저장되는 곳을 노출하는 게 취약점인 이유

공격자가 공격할 SQL쿼리문을 결정할 때 유용하게 쓰임

 #3 코드 분석

java 코드이다.

1.

public class InsecureDataStorage2Activity extends AppCompatActivity

 

 

이 클래스는 InsecureDataStorage2Activity.java파일에 정의되어있을 것.

 

2.

private SQLiteDatabase mDB;

 

SQLiteDatabase는 안드로이드에서 SQLite 데이터베이스를 다루는 데 사용되는 클래스, DB를 생성 관리, 데이터 쿼지 및 조작시 사용

mDB는 SQLite 데이터베이스에 대한 참조를 저장하는 변수

 

3.

this.mDB = openOrCreateDatabase("ids2", 0, null);

 

ids2: 데이터베이스의 이름

0: 읽기와 쓰기 모두가 가능한 데이터베이스의 모드

null: DB를 열 때 사용할 CursorFactory

 

4.

this.mDB.execSQL("CREATE TABLE IF NOT EXISTS myuser(user VARCHAR, password VARCHAR);"

 

mDB라는 DB객체에서 SQL문 실행

myuser라는 테이블 없으면 만들기 user password 모두 VARCHAR형

대놓고 DB를 노출하는 모습! sql injection시 유용하게 쓰일 정보인 듯하다.

 

5.

catch (Exception e) {
            Log.d("Diva", "Error occurred while creating database: " + e.getMessage());

Diva는 로그 태그, e.getMessage(): 오류메시지 받아오는 메서드

 

6.

setContentView(R.layout.activity_insecure_data_storage2);

 

레이아웃에 activity~storage2.xml에 있다는 뜻

 

8. 

EditText usr = (EditText) findViewById(R.id.ids2Usr);

 

ids2Usr라는 id를 가진 view에서 값을 가져와 EditText형으로 바꿔서 입력칸 usr변수에 저장

 

 

9. 

this.mDB.execSQL("INSERT INTO myuser VALUES ('" + usr.getText().toString() + "', '" + pwd.getText().toString() + "');");

mDB객체에서 SQL문을 실행하여 사용자로부터 입력받은 값에서 텍스트 가져와서 스트링형으로 변환해서 insert하는 메서드

 

 

10. 

this.mDB.close();

아까 연 mDB 객체 닫기

 

#4 취약점 예방