서 론
요즘 이슈가 되고 아이폰도 해킹한다는 그 NSO의 페가수스!!!
'''
NSO그룹은 국가의 정부기관을 대상으로 테러와 범죄를 막는 데 사용하는 최고 수준의 스파이웨어 기술을 개발하는 기업이다. NSO그룹이 페가수스를 개발한 목적 또한 범죄나 테러를 막기 위함이다. 멕시코 정부가 스파이웨어를 사용, 마약왕 ‘엘 차포’의 인맥들이 사용하는 휴대전화에 침투해 그의 은신처를 찾아낸 사례는 페가수스가 범죄조직과 싸우는 데 유용한 무기가 될 수 있음을 보여준다.
'''
원래의 페가수스를 만든 목적은 이렇다고한다.
자세한 내용은 아래의 링크를 참고하면 될 것 같다.
https://www.dailysecu.com/news/articleView.html?idxno=105797
https://m.boannews.com/html/detail.html?idx=99221
http://weekly.chosun.com/client/news/viw.asp?n
sha256
d257cfde7599f4e20ee08a62053e6b3b936c87d373e6805f0e0c65f1d39ec320
1. 메인 분석
이 부분부터 분석을 시작한다.
빨간색 부분을 눈여겨봐야 하고,
파란색은 패키지의 버전을 체크하는 부분으로 보인다. (정상)
이 빨간색 두줄부터 먼저 살펴보자.
루트권한을 확인하고 무엇인가를 설치하는 것을 보인다. NativeFileInstaller Class를 살펴보면 아래와 같다.
dll inejction을 하기위해 파일들을 로컬에 파일을 설치하고, 이를 확인하는 코드이다.
두번째 줄은 ‘getInstalledPackages’라는 API를 사용해 설치된 패키지의 목록을 가져온다.
(인자로 특별한 플래그를 설정하고 싶지 않다면 0을 전달하면 됩니다. 그럼 기본적으로 설치된 앱 리스트들이 리턴됩니다.)
이후 startActivity로 MainActivity까지 같이 실행되는 것으로 보인다.
그래서 MainActivity클래스를 분석을 하였고, 가장 먼저 실행되는 onCreate메소드부터 보기 시작했다. 빨간색 박스를 분석하면 될 것이다.
domain()부터 보면
domain()부터 정상적인 행위를 하는 코드로 보이지만,
중간에 이상한 코드를 쓰레드로 돌리는 것을 확인 할 수 있다.
쓰레드로 실행되는 코드를 보면, 이상한 부분이 보일 것이다. “InjectHelper라……..” 뭔가를 인젝션하는 악의적인 행위로 보인다.. 하지만 확정을 지을 수 없어 조금 더 분석해볼 필요가 있다.
InjectHelper.executeCmd() 메소드를 살펴보자.
현재 앱이 설치되어 있는 위치를 구해서, 인자를 맞추어 준 다음 프로세스로 실행시키는 것을 알 수 있다 루트권한으로 말이다.
“su malware.apk/inject ‘packageName’ libghost.so ‘kick’ ‘gameMode’” 이러한 명령어로 프로세스를 실행시키는 것을 보인다. 그러면 여기서 apk파일안에 라이브러리와 inject파일이 있다는 것을 추측할 수 있다.
2. Dll 후킹 분석
특정 라이브러리를 inejction하는 inejctor와 라이브러리를 볼 수 있다.
음,, 먼저 inject 파일은 라이브러리를 injection해주는 injector의 역할일 것이기 때문에 나중에 부록에다가 분석과정을 넣겠습니다.
참고로 아래의 링크는 injection 파일의 소스코드 인 것처럼 보인다.
(https://github.com/liupingfang/android_injector/blob/master/jni/injector.c)
executeCmd() 메소드에서 ‘libhost.so’파일을 먼저 injection하기 때문에 libhost.so파일부터 보자.
Injection을 실행할 때 인자로 ‘kick’이라는 문자열을 넣었었는데, 아마 이 함수를 실행시키라는 의미인 것으로 보인다. Kick()함수를 살펴보면 libhook.so파일의 do_hook이라는 함수를 실행시키는 것으로 보인다. 그러면 또!!! Libhook.so파일을 살펴봐야한다.
이 외에는 libhost.so 라이브러리는 더 이상 하는 기능이 없어 보인다.
아래는 Libhook.so의 do_hook() 코드 일부분이다.
처음에 inejction으로 바이너리를 실행할 때 GameMode라는 것을 인자로 주었다. “mode1,mode2”이런식으로 말이다.
그래서 이 부분은 사용자가 선택한 게임모드에만 즉, 2개의 함수?에만 후킹을 거는 코드라고 볼 수 있다.
함수 내부를 살펴보면 보통 어떻게 후킹을 할 것인지 인자로 받기 마련인데,,,,, 나와있지 않았고, ida로 보면 사용자정의 함수로 보였다! 그래서 생각한 것이 익스포트된 것 같아서 찾아 본 결과.
그리고 사용자가 정의한 라이브러리는 lib 디렉토리에 보통 두는 것으로 알고 있다. 근데 왜 asssets에 두는 걸까.. 이 부분은 좀더 찾아 봐야할 것 같다.
(http://www.cydiasubstrate.com/api/c/MSHookFunction/) 를 보면 두번째 인자로 후킹할 함수를 넣는 것을 볼 수 있는다. 그러면 우리는 func_hook_ComputeBonusScoreEv가 후킹된 코드임을 알 수 있고,
코드를 후킹함수를 살펴보면 그냥 ‘original 함수 * gMulti’ 만하는 것을 볼 수 있다.
음,, 이유는 좀 더 찾아봐야 한다.
후킹되는 마지막 하나는 사용자가 정의한 거리를 반환한다.
(https://www.google.com/search?q=GetLuckyRushDistance&rlz=1C1CHBD_koKR959KR959&oq=GetLuckyRushDistance&aqs=chrome..69i57.109j0j1&sourceid=chrome&ie=UTF-8)
3. 메인 분석 및 사용자 정보탈취
현재 우리는
SplashActivity -> Mainactivity로 왔고, 그 중 domain()의 분석이 끝났다.
domain()은 후킹하는 코드가 들어있는 메소드이다. 다음으로는 TCAgent를 살펴 보자.
최근 실행되었던 앱들을 모두 긁어서 hashSet2.add에 암호화해서 담고있는 것을 볼 수 있다.
M211k는 packageName을 난독화 하는 메소드이다.
휴대폰의 CPU, Memory, Free Size, Battery State, 제조사, DeviceID, Connected Wifi MAC의 정보를 수집하는 것을 볼 수 있다. (각각 메소드를 분석 후 네이밍을 진행하였다.)
APN이란 ? 휴대 전화의 이동 통신사가 이동 통신사의 네트워크와 인터넷 간의 게이트웨이 연결을 설정하는 데 사용하는 설정입니다.
Apn : 통신사 명 (skt ,lg , kt)
mmc : 모바일 국가 코드
mnc : 모바일 네트워크 코드
이 두 가지로 특정 모바일 네트워크 사업자를 식별한다고 한다.
사용자 휴대폰의 전화번호를 가져온다.
휴대폰의 cid와 lac를 구하는 것을 볼 수 있습니다.
Lac는 위치 지역 코드는 현재 위치 지역의 고유 번호입니다
cid는 위치 지역 코드 내에서 각 BTS(Base Transceiver Station) 또는 BTS의 섹터를 식별하는 데 사용되는 일반적으로 고유한 번호입니다.asdasd
이 두 정보를 가지고 단말기가 연결된 기지국의 위치 정보를 알 수 있고, 기지국의 위치를 알고 있다면 GPS 없이도 어느정도 위치를 갸름할 수 있다.( GPS 전파가 갈수 없는 지하나 건물 안이라면 GPS는 답이 아니다.)
lastKnownLocation값을 통해 위도와 경도를 알 수 있습니다. 그래서 배열에 lastKnownLocation 값을 계속해서 담고있는 것을 볼 수 있습니다. 또한 5분 주기로 사용자의 위치를 업데이트 합니다.
이렇게 수집한 사용자의 정보를 http://tdcv3.talkingdata.net/g/d로 보냅니다.
참고로 이렇게 url로 사용자의 정보를 보낸다는 것은 코드의 흐름을 분석하여 알아 낸 것이므로 확정지을 수 있다고 봅니다.
* 결 론 *
이 앱이 무슨앱인지는 잘 모르겠다.(게임인가?...)
후킹을 통해 사용자 정보를 수집하는 것이 아닌, 기존의 함수가 반환하는 값을 조작하는 형태로 보인다.
그리고 이 어플리케이션은 아래와 같은 정보를 탈취한다.
사용자 전화번호,
CPU info,
Memory,
Free Size,
Battery State,
제조사,
DeviceID,
Connected Wifi MAC의 정보를 수집,
사용자의 위치 정보
설치된 어플리케이션 수집
설치된 패키지 목록 조회
이러한 정보를 ‘http://tdcv3.talkingdata.net/g/d’로 전송한다.
'Malware' 카테고리의 다른 글
다크사이드(DarkSide) 랜섬웨어 분석 (0) | 2022.01.21 |
---|---|
Tools and ways to bypass the AV (0) | 2022.01.06 |
Lazarus Keylogger (HSMBalance.exe) (+복호화 추가) (0) | 2021.03.03 |
불법 성매매앱으로 위장한 악성 어플리케이션 (0) | 2021.02.13 |
금융 정보 탈취 악성코드 이모텟(Emotet) (0) | 2021.01.07 |