gnosis@kim:~#

gnosis@kim:~ # cat blog/diva-1-insecure-logging.md

# [DIVA] 1. Insecure Logging

[Tech note]series/DIVA4 min read[ko]

#Android#App_Security

🛠️ DIVA 소개 & Insecure Logging 문제 풀이

DIVA(“Damn Insecure and Vulnerable App”) 는 OWASP MSTG 학습 목적의 안드로이드 워게임입니다.
각 단계마다 실전에서 자주 발생하는 모바일 취약점을 체험하며 “원인–악용–대응” 흐름을 스스로 실습할 수 있게 설계되었습니다.
이번 글에선 1단계 Insecure Logging 문제를 다뤄 보겠습니다.


1. 문제 개요 : Insecure Logging

  • Objective : “어디서·어떻게 민감 정보가 로그에 남는지 찾아라”
  • 힌트 : 개발자가 인증정보/세션 ID/카드번호 등을 무심코 Log.*() 로 남기면 공격자가 Logcat을 통해 그대로 열람 가능

2. 풀이

  1. 앱 실행 → “Insecure Logging” 단계 선택
    카드 번호 입력 창에 임의 값 (나의 경우 123) 입력 후 CHECK OUT 클릭

  2. adb logcat | grep diva-log로 애플리케이션 전용 태그만 확인 (나는 Android Studio Logcat 기능 활용)

    민감 정보(ex: 카드번호)가 평문 그대로 노출

  3. ****decompile


    Log.e() 호출부에서 사용자가 입력한 문자열을 그대로 덧붙이고 있음을 확인.


3. Root Cause 분석

원인설명
개발 단계 디버그 로그를 그대로 출하Log.d / Log.e 등을 조건 분기 없이 사용 → Release 빌드에도 포함
민감 데이터 마스킹 부재카드번호·세션토큰 등 그대로 출력
권한 없는 프로세스도 Logcat 접근Android < 13 에선 READ_LOGS 퍼미션이 없어도 동일 UID 앱·PC ADB 모두 로그 열람 가능

4. 완화(Mitigation) 방안

항목구현 예시
빌드 타입 분리if (BuildConfig.DEBUG) Log.d(...)
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt')
로그 레벨 제한 & 필터링민감 값은 전부 **** 마스킹 → Log.i(TAG, "cc=****")
보안 로거 도입자체 래퍼 클래스 만들어
1) DEBUG 모드만 출력
2) 개인정보 자동 Redact
릴리스 빌드 스트립R8/ProGuard) -assumenosideeffects class android.util.Log { *; }
Android 13(33) 이상 타깃READ_LOGS 범위 축소, 외부 앱 logcat 접근 차단

5. 정리

교훈 : “로그는 스택트레이스가 아닌 개인정보 저장소가 될 수 있다.”
로그가 그대로 나온다? -> 털릴 수 있다~


✍️ 나의 메모

  1. Android 13 이상 타깃으로 설정하면 ADB 외 프로세스 logcat 접근이 막히지만, 루팅 환경에선 여전히 취약.
  2. 차후 syslog 서버 전송 시에도 암호화 여부 확인 필요.