- 해당 파일은 우리은행을 사칭했던 앱이다. apk 악성코드 샘플을 분석해보려고 하다가 예전에 피싱과 관련된 apk가 있길래 해당 앱으로 분석을 진행하였다.
파일 구성
- 파일명: wooribank.apk
- 해시값
- MD5: 7a21e6b574427fcdc5f9c8db33f707cc
- SHA-1: f09b2e759a86abdd42fc99b7068a2cdd669cccf1
- SHA-256: 6bf3853d2814acef8aa805efda34b156de18e96814a226c66eb4339b567eca55
- 파일 구성 요소
- 파일은 다양한 리소스 파일들과 classes.dex 파일로 이루어져 있는데, secret-classes/secret-classes2.dex 파일이 있는 것으로 보아 해당 파일들을 복호화 하는 과정이 들어있지 않을까 추정된다.
AndroidManifest.xml
- androidmanifest.xml 파일을 통해 먼저 구성요소들을 확인했다. 해당 파일들을 통해 앱의 패키지명이나 권한 정보들을 확인할 수 있다.
- 언뜻 봐도 전화나 통화기록, 연락처를 읽고 쓰는 권한들이 설정되어 있는 것을 확인할 수 있다.
apk 분석
- apk를 jadx-gui에 올려서 확인해봤을때 두 가지 클래스가 나오는 것을 확인할 수 있었고, 난독화 되어 있는 것으로 추측했다.
- androidmanifest.xml 파일을 통해 확인해봤을때 com.ppnt.ccmd.aavv.Nforg 클래스가 엔트리포인트인것을 알 수 있었다.
- ppnt.ccmd.aavv에 InDe 클래스를 확인해보니 dn_ssl 라이브러리를 로드하는 것을 확인할 수 있었고, decrypt 함수가 있는 것을 확인할 수 있었다. 그렇다면 so 파일에 있는 decrypt 함수를 사용해서 dex를 복호화할것이다.
- decrypt 함수를 사용하는 곳을 확인해보았다. 일단 decrypt 함수에 2가지 인자가 넘어간다는 것을 알 수 있었고, getAbsolutePath()에 복호화할 dex 파일의 경로가 넘어갈 것이라고 추측했다.
- 먼저 attachBaseContext 부분을 확인하였다. dexDir 경로가 존재하지 않으면 a 함수를 호출하는 것을 알 수 있었다. 일종의 해커의 루틴이지 않을까 싶다.. 잘 모르겠음
- 아마도 정상 앱과의 비교를 위한 것이 아닐까 싶다.
- 파일을 실행중에 복호화를 진행하는 것으로 보이는데, else 부분에서 secret-classes/secret-classes2.dex 파일이 a 함수의 3번째 인자로 넘어간다.
- a 함수를 쭉 따라가본 결과 decrypt 함수를 호출하는 것을 확인할 수 있었다. d클래스의 a 메소드를 호출하는 것을 볼 수 있어 쓰레드로 복호화를 수행한다.
복호화 로직 분석
- decrypt 함수를 쫓아 가보자.. IDA에서 java로 함수 검색 해보니 바로 decrypt 함수가 나오는 것을 확인할 수 있었다.
- 보아하니 j_EVP_DecryptInit_ex에서 키를 설정하는 것을 확인할 수 있다. 키는 “dbcdcfghijklmaop” 였다.
- aes 128 ecb 모드인 것도 다 확인되었으니 chatgpt를 통해 복호화 코드를 만들어달라고 하자. 귀찮을땐 chatgpt가 짱이다.
- 복호화 하고 나니 dex 시그니처가 확인됐다.
Secret-classes2_decrypt.dex 분석
- 해당 파일에서 악성 행위가 이루어진다는 것을 확인하였고, 해당 파일을 위주로 분석을 진행하였다.
- CallActivity가 굉장히 많이 나뉘어져 있다.
- MainActivity 분석
- app.html 파일을 로드하는 것을 확인할 수 있다.
- 해당 app.html 파일이 피해자들에게 보여지는 메인 화면이다.
- 권한을 요구하는 부분도 확인가능하다.
- Mcrypt 클래스에는 데이터를 암호화하고, 복호화하는 로직이 담겨있다.
- C2 서버로 추정되는 도메인을 확인할 수 있었다. 아까 앞에 분석했던 복호화 함수를 통해 C2 서버로부터 받는 데이터를 복호화하는것을 알 수 있다. 아마 저 pwnText 안에 실제 데이터가 전송되는 C2 서버가 있을 것으로 판단된다.
- 하지만 해당 C2는 닫혀 있어서 더 확인이 불가했다.
- 굉장히 많은 정보들을 가져가는 것을 확인할 수 있었다.
- 그 중에서도 com.skt.prod.dialer 정보를 가져가는 것을 확인할 수 있는데, skt만 따로 왜 지정해서 확인하는지는 모르겠다. 더 많은 로직이 있지만, 귀찮아서 생략..
- URL을 생성하는 부분이 있는데.. 왜 이렇게 해놨지?... 각 액티비티마다 다르게 분기를 타서 URL 끝에 번호를 지정해주는것 같았다.
- 이 부분에서 위에 있는 데이터를 다 수집 후 json에 담아 C2서버로 전송한다.
js 파일 분석
- subutil.js 파일을 확인해본 결과 json으로 유저 정보를 수집하는 것을 확인할 수 있다.
- 결국 setUserInfo를 통해 받은 정보를 넘기고, “K_SEND_WEB_USER_INFO” 액티비티를 통해 정보를 C2로 넘기는 것을 확인할 수 있었다.
- apk는 진짜 많이 안해봐서 그런지 헷갈리고, 아직도 많이 어렵다. 좀 더 많이 해봐야지..
'디지털포렌식 > 악성코드 샘플 분석' 카테고리의 다른 글
[Kimsuky] 인적사항.doc (0) | 2024.02.03 |
---|---|
[Kimsuky] 북의 핵위협 양상과 한국의 대응방향.chm (0) | 2024.02.02 |
[코니그룹] 카카오 보안메일 악성코드 (1) | 2023.10.31 |
[코니그룹] 국세청 사칭 악성코드 - 국세청 종합소득세 해명자료 제출 안내 (2023.9.4) (1) | 2023.10.28 |
전라남도 코로나 바이러스 대응 긴급 조회.hwp (1) | 2023.10.28 |