naroSEC
article thumbnail

들어가기 앞서

 

통신 포트 검사를 통한 Frida 탐지 방안과 우회 기법

들어가기 앞서 Frida 실행 시 생성되는 파일 검사를 통한 탐지 방안과 우회 기법 들어가기 앞서 이번 포스팅부터는 모바일 데이터 위·변조 목적 및 분석 도구로 사용되는 후킹 도구인 Frida를 탐지

naro-security.tistory.com

이전 "통신 포트 검사를 통한 Frida 탐지 방안과 우회 기법" 포스팅에 이어서 이번 포스팅에서는 앱에서 사용중인 라이브러리를 검사하여 Frida를 탐지하는 방안과 우회 기법을 다뤄보도록 하겠다.

 

 ※ 실습 진행에 사용되는 ANDITER 앱은 아래의 GitHub에서 다운로드 가능하다.

 

GitHub - naroSEC/Anditer

Contribute to naroSEC/Anditer development by creating an account on GitHub.

github.com


개요

[그림 1] Frida 후킹 시  Anditer 앱 프로세스의 메모리 맵 정보

Frida FrameWork후킹 기능은 [그림 1]과 같이 애플리케이션의 메모리 주소를 참조해 호출되는 특정 함수 코드를 가로채서 변조한 코드로 돌려주게 된다. 이때, Frida후킹과 더불어 기능 사용을 위해 애플리케이션 프로세스에 특정 라이브러리를 삽입하며, 클라이언트 측에서 요청한 명령어를 삽입한 라이브러리 모듈을 통해 동작시킨다.

[그림 2] Bypass Module 탐지

Bypass Module 탐지 항목은 실행중인 애플리케이션 프로세스 정보를 확인해 매핑되는 Frida 관련 라이브러리가 존재하는지 검사하고 존재할 경우 Frida 서버가 동작 중인 것으로 판단해 탐지하게 된다.


분석

[그림 3] isCheckFridaModule() 함수 소스코드

[그림 3]isCheckFridaModule() 함수는 Bypass Module 탐지 결과를 반환해주는 역할을 한다. 코드를 보면 ①에서 프로세스 정보 확인을 위해 /proc/self/maps 파일 객체를 생성하고 있다. /proc/self 디렉터리에는 현재 실행 중인 프로세스에 관한 정보가 저장되어 있으며 maps 파일에서 해당 프로세스의 매핑된 메모리 주소 공간을 확인할 수 있다. ②에서는 maps 데이터를 읽어와 frida 라는 문자열이 포함되어 있는지 검사하며 문자열이 존재할 경우 Frida 사용자로 탐지하게 된다.

 

Bypass Module 탐지를 우회하기 위한 후킹 포인트는 세 가지가 있다. 첫 번째는 함수 결과 상관없이 무조건 false를 반환하도록 isCheckFridaModule() 함수를 재 작성하는 방법이고 두 번째는 File 객체를 읽어올 때 사용된 BufferReader.readLines() 함수를 후킹해 특정 문자열이 포함되어 있을 경우 더미 값으로 변조하는 방법이다. 그리고 세 번째는 contains() 함수 호출 시 전달되는 인자 값의 비교 문자열을 변조하는 방법이다. 여기서는  두 번째 방법을 사용해 탐지를 우회해 보도록 하겠다.


우회 실습

[그림 4] BufferedReader 클래스의 readLines() 함수를 후킹하기 위한 Frida 스크립트

[그림 4]는BufferdReader클래스의 readLines() 함수를 후킹하기 위해 필자가 작성한 Frida 스크립트이다. 코드를 보면 에서 TextStreamsKT클래스 객체를 생성하고 isCheckFridaModule() 함수에서 readLines() 함수를 호출할 때 전달되는 인자의 데이터 타입에 맞춰 readLines() 함수를 오버로딩으로 구현했다. 에서는 반환 값 검사를 위해 원본 readLines() 함수를 호출해 결과 값을 받아온다. 이때, 받아오는 결과 값이 List 타입이기 때문에 interator() 함수를 통해 List에 저장되어 있는 모든 요소 값을 가져온다. ③에서는 가져온 데이터의 문자열 중 frida가 포함되어 있는지 검사하고 포함되어 있다면 더미 List를 생성해 반환한다.

[그림 5]  Bypass Module 탐지 우회 성공

Frida를 통해 작성한 스크립트를 ADITER 애플리케이션에 어태치 한다. 그 후 Bypass Module 탐지 항목을 체크하면 Success! 가 출력되며 탐지가 우회된 것을 볼 수 있다.


마무리

지금까지 앱 프로세스의 메모리 맵 정보를 확인하여 Frida에서 사용되는 특정 라이브러리가 삽입되어 있는지 검사하여 Frida를 탐지하는 방안을 다뤄봤고 또, 이를 공격자의 관점에서 어떻게 우회할 수 았는지 살펴봤다. 후킹 기능을 지원하는 도구는 Frida 외에도 여러 도구들이 존재하기 때문에, Frida를 탐지한다고 원천적으로 후킹을 방어할 수는 없다. 따라서, 안티 후킹 기법들을 적용하여 후킹 자체를 탐지하고 막는 추가 대응을 적용해야 한다. Frida 관련 파트는 여기서 마치고 다음 포스팅에서는 중간자 공격을 방어하기 위해 등장한 피닝 기법에 대해서 다뤄보도록 하겠다.

profile

naroSEC

@naroSEC

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

profile on loading

Loading...