이번 파트는~~~ 디바의 첫번째 문제 풀이다.
문제는 총 13개가 있다. 각 문제당 1개의 포스트로 할 것이며, 포스트 구성은 코드 분석, 취약점 테스트, 시큐어 코딩, 재배포 후 테스트 과정을 거칠거다. (네... 암요 해야죠 코드 분석.. 시큐어 코딩.. 하기 싫긴 하지만 먹고 살아야죠)

# 코드 분석
취약 모바일 앱 DIVA - 1 에서 정적 분석 준비를 끝냈다. 폴더를 열면 smali랑 sources가 있는데, sources가 smali 코드를 자바로 디컴파일(역변환)한 폴더이다. 가능하면 smali 코드는 안 볼 생각이다.. (내 뇌는 기계가 아니야...)

sources의 diva 디렉토리에 있는 MainActivity를 보자.
d1button(Insecure Logging 버튼)을 클릭하면 LogActivity 클래스를 호출해 실행한다.
public void startChallenge(View view) {
if (view == findViewById(R.id.d1button)) {
Intent i = new Intent(this, (Class<?>) LogActivity.class);
startActivity(i);
return;
}
LogActivity 파일을 보면 checkout(전달) 이벤트가 발생하고 에러가 발생하면 ccText(입력 박스)에 있는 값이 Log.e 함수를 통해 로그로 출력된다.
public void checkout(View view) {
EditText cctxt = (EditText) findViewById(R.id.ccText);
try {
processCC(cctxt.getText().toString());
} catch (RuntimeException e) {
Log.e("diva-log", "Error while processing transaction with credit card: " + cctxt.getText().toString());
Toast.makeText(this, "An error occured. Please try again later", 0).show();
}
}
# 취약점 테스트
앱 실행 후 아무 넘버나 입력하고 Check Out 버튼을 클릭하자.

안드로이드 스튜디오에 logcat 기능이 있다. 이는 해당 디바이스에서 생성되는 모든 로그를 수집할 수 있는 도구이다. (adb 툴에서 제공) 해당 툴 실행 후 diva-log 를 필터하니 에러가 발생한 크레딧 카드 넘버가 출력된다.

정말 유감스럽게 이게 취약점이다.
만약에 이 로그가 따로 어디에 저장된다면 2차 공격이 가능하겠지만.. 솔직히 이걸로 무엇을 할 수 있을지 모르겠다.
왜냐하면 로그가 출력된다고 해도 악성앱이 설치돼서 로그에 접근할 수 있는 권한이 있는게 아니면 아무런 쓸모가 없기 때문이다.
다른 앱에 있는 로그는 함부러 접근하지 못한다. 지금은 USB 디버그 모드가 활성화되어 있기에 접근할 수 있지만, 이게 아니라면 애초에 접근조차 못한다는 말이다.
그렇다고 로그가 따로 어디에 저장되냐? 그것도 아니다. 로그는 메모리에 남아있고, 이 메모리 버퍼가 꽉차면 하나씩 지워지는 FILO 방식이다.
그럼에도 불구하고! 조치해야지.. 왜? 컴플라이언스에 걸리니까 그리고 어떤 취약점으로 연계될 지 모르니까!
# 시큐어 코딩
크레딧 카드 넘버가 로그로 출력되는게 문제였다. 크레딧 카드 넘버만 출력 안되게 만들면 된다.
public void checkout(View view) {
EditText cctxt = (EditText) findViewById(R.id.ccText);
try {
processCC(cctxt.getText().toString());
} catch (RuntimeException e) {
Log.e("diva-log", "Error while processing transaction with credit card");
Toast.makeText(this, "An error occured. Please try again later", 0).show();
}
}
# 재배포
귀찮음... 한 번에 할게요
'모바일 > DIVA' 카테고리의 다른 글
| 취약 모바일 앱 DIVA - 6 (Access Control Issues Part 1 ~ Part 3) (1) | 2025.12.19 |
|---|---|
| 취약 모바일 앱 DIVA - 5 (Input Validation Issue Part 1 and 2) (0) | 2025.12.18 |
| 취약 모바일 앱 DIVA - 4 (Insecure Data Storage Part 1~3) (0) | 2025.12.18 |
| 취약 모바일 앱 DIVA - 3 (Hardcoding issue Part 1 and Part 2) (0) | 2025.12.17 |
| 취약 모바일 앱 DIVA - 1 (0) | 2025.12.17 |
