본문으로 바로가기

안드로이드·갤럭시·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

출처 : https://kairo96.gitbooks.io/android/content/ch4.2.html

 

다. 취약점 진단 실습

1. 분석 대상 앱 설치

- 실습을 위해 아래의 글을 참고하여 인시큐어뱅크(InsecureBankv2) 애플리케이션을 설치하고 서버 설정을 마친다.

[AOS App 취약점 진단 · 모의해킹] - 인시큐어뱅크 앱 설치 및 실행 방법 정리(InsecureBankv2)

 

인시큐어뱅크 앱 설치 및 실행 방법 정리(InsecureBankv2)

1. 인시큐어뱅크 앱 이란? - 모바일 뱅킹 취약점 진단을 위한 테스트 용도로 제작된 애플리케이션이다. - 안드로이드 앱 취약점 진단을 실습할 수 있는 환경을 제공한다. - 2019년 이후로 업데이트

hagsig.tistory.com

 

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 다운로드, 디바이스 연결 및 파일 송수신 명령어 정리

 

adb 다운로드, 디바이스 연결 및 파일 송수신 명령어 정리

가. Android Debug Bridge(adb) 정의 - adb(안드로이드 디버그 브릿지)는 기기와 통신할 수 있도록 지원하는 다목적 명령줄 도구이다. - 디바이스에서 다양한 명령어를 실행하는 데 사용할 수 있는 Unix Shel

hagsig.tistory.com

 

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]