안드로이드·갤럭시·AOS 애플리케이션 취약점진단/모의해킹 무료 강의 학식(hagsig)
가. 취약점 정의
- 디바이스 로그란 모바일 애플리케이션 사용 시 디바이스에 저장되는 로그를 말한다.
- 로그에는 애플리케이션 실행 중에 발생하는 이벤트 및 통신기록 등이 저장된다.
- 장애원인 분석이나 디버깅 목적 등을 위해 개발단계에서 의도적으로 로그를 남긴다.
- 배포 시 이러한 로그가 남지 않도록 조치해야 하지만 그렇지 않은 경우 로그에 *중요정보가 평문으로 노출되는 경우가 발생한다.
*중요정보 : 아이디/패스워드, 개인정보(이름, 주민등록번호, 전화번호 등), 쿼리문, 서버정보 등
나. 대응 방안
- 아래의 소스코드 처럼 android.util.Log 클래스를 사용하면 디바이스 로그가 남겨진다.
- 배포되는 앱에서는 Log 클래스를 삭제하여 디바이스 로그에 중요정보가 노출되지 않게 하여야 한다.
//디바이스 로그 예시
import android.util.Log;
public class Main extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Log.e("tag", "error message");
Log.w("tag", "warning message");
Log.i("tag", "information message");
Log.d("tag", "debugging message");
Log.v("tag", "verbose message");
}
}Copy
다. 취약점 진단 실습
1. 분석 대상 앱 설치
- 실습을 위해 아래의 글을 참고하여 인시큐어뱅크(InsecureBankv2) 애플리케이션을 설치하고 서버 설정을 마친다.
[AOS App 취약점 진단 · 모의해킹] - 인시큐어뱅크 앱 설치 및 실행 방법 정리(InsecureBankv2)
2. adb 디바이스 연결
- ADB를 이용하여 디바이스에 접근한다.
※ NOX 에뮬레이터의 경우 adb connect 127.0.0.1:62001 명령어를 입력하여 연결할 수 있다.
adb connect 127.0.0.1:62001 #NOX일경우 해당 명령어를 통해 연결 가능
adb devices #디바이스 리스트 및 연결가능 여부가 출력됨
adb shell #디바이스에 연결
※ adb에 대한 자세한 사용방법은 아래의 게시글을 참고하자.
[AOS App 취약점 진단 · 모의해킹] - adb 다운로드, 디바이스 연결 및 파일 송수신 명령어 정리
3. 애플리케이션 PID 확인
- 로그를 수집할 애플리케이션의 프로세스 번호(PID)를 확인한다.
#디바이스에서 실행중인 프로세스 목록 출력
adb shell ps
※ 애플리케이션의 프로세스 이름을 모를경우 아래의 방법을 통해 찾을 수 있음.
#방법1 프로세스 목록에서 애플리케이션 이름과 유사한 프로세스 이름을 찾음.
adb shell ps
#방법2 애플리케이션 설치경로에서 애플리케이션 이름과 유사한 프로세스 이름을 찾음.
adb shell ls /data/data
4. 애플리케이션 로그 확인
- logcat 명령어를 사용하여 로그를 출력한다. findstr 으로 PID를 지정하면 원하는 애플리케이션의 로그만 볼 수 있다.
//예시1
adb logcat | findstr [PID]
//예시2
adb logcat --pid [PID]
※ 로그캣(logcat) 메시지 유형 및 설명
위 | 구분 | 설명 |
가장 낮음 | V | Verbose (중요하지 않은 정보) |
D | Debug (디버그 정보) | |
I | Information (일반 정보) | |
W | Warning (경고 정보) | |
E | Error (에러 정보) | |
F | Fatal (중요한 정보) | |
가장 높음 | S | Silent (가장 높은 우선순위의 정보) |
※ 로그켓(logcat) 옵션 설명
옵션 | 세부 옵션 | 설명 |
--pid | 지정한 Process ID의 로그만 출력한다. | |
-s | 모든 태그의 우선순위를 'silent'로 설정하는 필터 표현식 '*:S'와 동일. | |
-c | 로그 전체를 삭제한다. | |
-d | 로그를 스크린에 덤프한다. | |
-f | 파일이름 지정한 파일이름에 로그를 저장한다. | |
-t | 가장 최근 로그를 출력한다. 가장 최근 로그 10줄만 출력하고 싶다면 -t 10을 입력한다. | |
-g | 로그 버퍼의 사이즈를 가져오고 종료한다. | |
-b | events | event 로그를 출력한다. 기본적으로 event 로그는 출력하지 않음. |
all | 모든 로그를 출력한다. | |
-v | 포멧 로그 메시지의 포멧을 설정한다. 기본은 brief 포멧이다. | |
brief | 메시지를 발급하는 프로세스의 우선순위, 태그 및 PID를 표시 | |
long | 모든 메타데이터 필드와 별도의 메시지를 빈 줄과 함께 표시 | |
process | PID만 표시 | |
raw | 다른 메타데이터 필드가 없는 원시 로그 메시지를 표시 | |
tag | 우선순위/태그만을 표시 | |
thread | 메시지를 발급하는 스레드의 날짜, 호출 시간, 우선순위/태그, PID 및 TID를 표시하는 기존 형식 | |
threadtime | 메시지를 발급하는 스레드의 날짜, 호출 시간, 우선순위/태그, PID 및 TID를 표시 | |
time | 메시지를 발급하는 프로세스의 날짜, 호출 시간, 우선순위/태그 및 PID를 표시 | |
color | 로그 레벨에 따라 다른 색으로 표시 | |
*:<log_level> | *:e | Error(에러 정보) 레벨 로그만 출력한다. |
*:w | Warning(경고 정보) 이상의 레벨 로그만 출력한다. |
5. 인시큐어뱅크 앱에서 중요정보 입력
- 인시큐어뱅크 앱에서 로그인을 시도한다.(기본 ID/PW : jack//Jack@123$).
- "Change Password"에서 패스워드를 변경한다.
- logcat에 출력된 로그를 보면 로그인 시 사용한 계정정보(username/password)를 확인할 수 있다.
- 또 변경한 패스워드 정보가 평문으로 노출되는 것을 확인할 수 있다.
※ logcat 결과를 파일로 저장하고 싶을 경우 아래와 같은 명령어를 통해 텍스트 형태의 파일로 저장할 수 있다.
//예시1
logcat >> [filename]
//예시2
logcat -f [filename]
'Mobile App 취약점 진단 · 모의해킹 > AOS App 취약점 진단 · 모의해킹' 카테고리의 다른 글
[AOS 취약점 진단] 09강 - 메모리 내 중요정보 노출 확인(am dumpheap) (0) | 2023.12.09 |
---|---|
[AOS 취약점 진단] 09강 - 메모리 내 중요정보 노출 확인(DDMS) (0) | 2023.12.09 |
[AOS 취약점 진단] 08강 - 디바이스 로그 내 저장된 중요정보 확인(실습 1) (0) | 2023.12.03 |
[AOS 취약점 진단] 07강 - 애플리케이션 파일 및 데이터 권한 확인 (0) | 2023.12.03 |
adb 다운로드, 디바이스 연결 및 파일 송수신 명령어 정리 (0) | 2023.12.03 |