안드로이드 정적 분석

심야·2024년 9월 29일
0

모의해킹

목록 보기
42/47

정적 분석

정적 분석 단계에서 소스 코드를 분석해 확인할 사항은 다음과 같다.

  1. 암호화
    어떤 암호화 알고리즘을 사용하고 있는지 확인, 취약한 알고리즘과 하드코딩된 키가 존재하는지 확인한다.
  2. 코드 난독화
    난독화 기법이 적용되어 있는지 확인, 앱의 주요 로직을 보호 또는 취약하게 개발된 코드를 보호하기 위해 사용할 수 있다.
  3. 함수 호출
    앱 구동 시 안전하지 않은 함수 호출이나 취약점이 존재하는 함수를 사용하고 있는지 확인
    단말에 저장된 정보에 무단으로 접근하거나 의도하지 않은 정보 노출을 허용할 수 있다.
  4. 동적 코드 로딩
    앱 실행 시점에 코드를 동적으로 로딩하는 구간이 있는지 확인한다.
    동적 코드 로딩이 존재하면 동적분석(프리다)를 활용해 분석하며 정적 분석과 함께 입력 값 검증을 하는지 확인한다.
  5. 접근 제어
    앱이 과도한 권한을 허용하는지 확인한다. 민감한 기능이나 데이터에 대해 접근 제어를 허용하고 있지 않은지 확인하며 하드코딩된 자격 증명이나 토큰을 찾는다.
  6. 하드코딩된 중요 정보
    관리자 페이지에 접근하기 위한 비밀번호나 개인정보를 포함, DB 쿼리문, 서버에 직접 접근 가능한 URL 등 하드코딩된 정보를 확인한다.
  7. 네이티브 코드
    C, C++ 언어로 개발된 네이티브 라이브러리도 앞서 나열한 사항을 동일하게 확인해 취약점 여부를 확인한다.

정적 분석의 한계

정적 분석은 취약한 함수 사용 여부, 설계 구조 상의 취약점을 식별할 수 있으나 아래와 같은
한계가 있다.

  1. 실제 실행 시 발생하는 데이터 생성, 삭제, 변경 등 동적 분석이 불가능하다. 정적 분석은 코드 구조와 속성 분석만 가능할 뿐 코드 실행 흐름과 조건부 로직의 분기와 같은 동적인 특성을 완전히 이해하기 어렵다.
  2. 의존성 분석이 어렵다. 정적 분석은 코드 간의 의존성을 분석할 수 있으나, 동적으로 생성되거나 외부에서 입력되는 데이터 의존성 파악은 어렵다. 사용자나 서버에서 데이터를 받아 처리하는 앱의 경우 어떠한 입력과 응답이 발생하는지 완벽하게 예상할 수 없다.
  3. 안드로이드 앱은 액티비티, 서비스, 브로드캐스트 리시버 등과 같이 다양한 시작점을 갖기 때문에 파일 단위로 이루어지는 정적 분석만으로는 전체적인 코드 흐름을 파악하기 어렵다.

APK 설치

에뮬레이터 연결 후, adb install -r ./[APK File name] 명령어로 APK를 설치한다.

설치가 완료되어 앱 실행 결과 잘 작동한다.

APK 디컴파일

mac os에서 unzip 명령어를 사용해 apk 파일을 압축해제 할 수 있다.

unzip [xxx.apk] -d [dir name]

해제 결과, mainfest, dex, 네이티브 라이브러리(lib) res 등의 폴더가 존재한다.

jadx-gui 디컴파일러를 사용해 apk 파일 오픈 결과, manifest.xml 파일, 디컴파일 된
자바 코드와 APK 구조를 파악할 수 있다.

Manifest.xml

manifest.xml 파일 구성 요소는 총 4가지로 구성된다.

  • manifest

  • application

  • uses-permission

  • activity/service/provider/recevier

안드로이드 uses-permission 엑세스 권한 목록

안드로이드 접근권한 목록 중에 민감한 사용자 데이터 또는 특정 시스템 기능에 엑세스 가능한 권한 목록은 아래와 같다.

권한설명
연락처 및 캘린더 접근 권한
READ_CONTACTS사용자의 연락처 정보를 읽을 수 있음
WRITE_CONTACTS사용자의 연락처 정보를 수정하거나 추가할 수 있음
GET_ACCOUNTS기기에 등록된 계정 목록에 접근할 수 있음
READ_CALENDAR사용자의 캘린더 정보를 읽을 수 있음
WRITE_CALENDAR사용자의 캘린더에 이벤트를 추가하거나 수정할 수 있음
전화 및 통화 관련 권한
READ_PHONE_STATE전화번호, 기기 ID 등의 전화 상태 정보를 읽을 수 있음
CALL_PHONE전화 앱을 거치지 않고 직접 전화 발신을 할 수 있음
READ_CALL_LOG통화 기록을 읽을 수 있음
WRITE_CALL_LOG통화 기록을 수정할 수 있음
ADD_VOICEMAIL음성사서함을 추가하거나 수정할 수 있음
USE_SIPSIP 통신을 사용할 수 있음
PROCESS_OUTGOING_CALLS발신 전화 이벤트를 모니터링하고 제어할 수 있음
메시지 및 SMS 관련 권한
SEND_SMSSMS 메시지를 보낼 수 있음
RECEIVE_SMSSMS 메시지를 수신할 수 있음
READ_SMSSMS 메시지 내용을 읽을 수 있음
RECEIVE_WAP_PUSHWAP 푸시 메시지를 수신할 수 있음
RECEIVE_MMSMMS 메시지를 수신할 수 있음
위치 정보 접근 권한
ACCESS_FINE_LOCATIONGPS를 사용하여 정확한 위치 정보를 얻을 수 있음
ACCESS_COARSE_LOCATION기지국 또는 Wi-Fi를 통해 대략적인 위치 정보를 얻을 수 있음
ACCESS_BACKGROUND_LOCATION백그라운드에서 위치 정보를 수집할 수 있음 (Android 10 이상)
저장소 및 파일 접근 권한
READ_EXTERNAL_STORAGE외부 저장소에 저장된 파일을 읽을 수 있음
WRITE_EXTERNAL_STORAGE외부 저장소에 파일을 쓰거나 수정할 수 있음
MANAGE_EXTERNAL_STORAGE외부 저장소의 모든 파일에 대한 전체 접근 권한을 가질 수 있음 (Android 11 이상)
카메라 및 마이크 접근 권한
CAMERA카메라를 사용하여 사진이나 동영상을 촬영할 수 있음
RECORD_AUDIO마이크를 사용하여 오디오를 녹음할 수 있음
센서 및 신체 정보 접근 권한
BODY_SENSORS심박수 등 신체 관련 데이터를 수집할 수 있음
ACTIVITY_RECOGNITION사용자의 활동 상태를 인식할 수 있음 (예: 걷기, 달리기)
개인 정보 및 시스템 설정 권한
READ_PRIVILEGED_PHONE_STATE추가적인 전화 상태 정보를 읽을 수 있음 (시스템 앱 전용)
READ_LOGS시스템 로그를 읽을 수 있음
WRITE_SETTINGS시스템 설정을 읽거나 변경할 수 있음
SYSTEM_ALERT_WINDOW다른 앱 위에 창을 띄울 수 있음
PACKAGE_USAGE_STATS앱 사용 통계에 접근할 수 있음
INSTALL_PACKAGESAPK 파일을 설치할 수 있음
REQUEST_INSTALL_PACKAGES사용자에게 앱 설치를 요청할 수 있음
MODIFY_AUDIO_SETTINGS오디오 설정을 변경할 수 있음
네트워크 및 연결 설정 권한
ACCESS_WIFI_STATEWi-Fi 연결 상태 정보를 읽을 수 있음
CHANGE_WIFI_STATEWi-Fi 연결 상태를 변경할 수 있음
ACCESS_NETWORK_STATE네트워크 연결 상태 정보를 읽을 수 있음
CHANGE_NETWORK_STATE네트워크 연결 상태를 변경할 수 있음
BLUETOOTH블루투스 기능에 접근할 수 있음
BLUETOOTH_ADMIN블루투스 설정을 변경할 수 있음
NFCNFC 기능을 사용할 수 있음
생체 인증 및 보안 관련 권한
USE_FINGERPRINT지문 인식 기능을 사용할 수 있음
USE_BIOMETRIC생체 인증 기능을 사용할 수 있음 (Android 9 이상)
BIND_ACCESSIBILITY_SERVICE접근성 서비스를 바인딩하여 기기를 제어할 수 있음
계정 및 인증 관련 권한
MANAGE_ACCOUNTS계정을 추가하거나 제거할 수 있음
USE_CREDENTIALS계정의 인증 정보를 사용할 수 있음
AUTHENTICATE_ACCOUNTS계정 인증을 수행할 수 있음
디바이스 관리자 및 잠금 화면 권한
BIND_DEVICE_ADMIN디바이스 관리자 권한을 부여받을 수 있음
DISABLE_KEYGUARD잠금 화면을 비활성화할 수 있음
기타 민감한 권한
READ_FRAME_BUFFER화면에 표시되는 내용을 읽을 수 있음
CAPTURE_AUDIO_OUTPUT기기의 오디오 출력을 캡처할 수 있음
CAPTURE_VIDEO_OUTPUT기기의 비디오 출력을 캡처할 수 있음
GET_CLIPBOARD_DATA클립보드에 저장된 내용을 읽을 수 있음
INTERNET네트워크 소켓을 열 수 있음 (주의: 다른 권한과 결합될 경우 민감한 데이터 전송에 사용될 수 있음)
profile
하루하루 성실하게, 인생 전체는 되는대로.

0개의 댓글