McAfee의 모바일 연구 팀은 최근 한국 개발자가 개발한 교통 애플리케이션 시리즈의 플러그인으로 위장한 새로운 악성 Android 앱을 발견했습니다. 이 시리즈는 버스 정류장 위치, 버스 도착 시간 등 한국의 각 지역에 대한 다양한 정보를 제공합니다. 이 시리즈에는 총 4 개의 앱이 있으며 그 중 3개는 2013년부터 Google Play에서 이용가능 했으며 다른 하나는 2017년부터 이용가능 했습니다. 현재 4개의 앱이 모두 Google Play에서 삭제되었으며 가짜 플러그인 자체는 스토어에 업로드되지 않았습니다. 가짜 플러그인을 분석하는 동안 우리는 초기 다운로더와 추가 페이로드를 찾고있었습니다. 우리는 이 시리즈의 각 앱의 특정 버전(동일한 날짜에 업로드 됨)을 발견했는데, 이 버전이 멜웨어를 설치한 장치에 심고 있었고, 이는 개발 5년 만에 Google Play에서 제거된 것을 설명합니다.
그림 1. 이 시리즈 중 하나인 '대구 버스' 앱의 캐싱된 Google Play 페이지
악성 교통 앱이 설치되면 해킹당한 웹 서버에서 추가적으로 페이로드가 다운로드되는데, 이 서버에는 원래 획득되어야 할 가짜 플러그인이 포함되어 있습니다. 가짜 플러그인이 다운로드되어 설치된 후, 그것은 완전히 다른 일을 하는데, 그것은 교통 앱의 플러그인 역할을 하며 장치에 트로이 목마를 설치하고 사용자들이 Google 계정 비밀번호를 입력하도록 유도하여 장치를 완전히 장악하려고 시도합니다. 흥미로운 것은 악성코드가 네이티브 라이브러리를 사용하여 장치를 탈취하고 또한 탐지를 피하기 위해 라이브러리를 삭제한다는 점입니다. 이것은 네이버, 카카오톡, 다음, SKT와 같은 인기 있는 한국 서비스의 이름을 사용합니다. 우리의 원격측정 자료에 따르면, 감염된 장치의 수가 상당히 적었기 때문에 최종 페이로드가 소수의 대상 그룹에만 설치되었음을 시사합니다.
캠페인 : 다음 다이어그램은 맬웨어 배포에서 장치 감염까지의 전체 흐름을 설명합니다.
그림 2. 디바이스 감염 프로세스
교통 앱의 악성 버전이 설치되면 가짜 플러그인이 이미 설치되어 있는지 확인하고 그렇지 않은 경우 서버에서 다운로드하여 설치합니다. 그 후, 가짜 플러그인에 의해 떨어진 트로이 목마와 유사한 추가 네이티브 트로이 목마 바이너리를 다운로드하고 실행합니다. 모든 작업이 완료되면 C2 서버와 연결되어 수신 된 명령을 처리합니다.
초기 다운로더 : 다음 표는 교통 앱 시리즈의 각각의 악성 버전에 대한 정보를 보여 줍니다다. Number of Installs가 표시하는 것처럼 이러한 앱이 많은 디바이스에서 다운로드 되었습니다.
앱의 클린 버전과 달리 악성 버전에는 "libAudio3.0.so"라는 네이티브 라이브러리가 포함되어 있습니다.
그림 3. 악성 네이티브 라이브러리가 포함된 교통 앱 버전
앱의 BaseMainActivity 클래스에서 악성 라이브러리를로드하고 startUpdate() 및 updateApplication()을 호출합니다.
그림 4. 악성 라이브러리가 앱에서 로드되고 실행됨.
startUpdate()는 "background.png"라는 특정 플래그 파일의 존재 여부와 가짜 플러그인이 이미 설치되어 있는지 여부를 확인하여 앱이 제대로 설치되었는지 확인합니다. 장치가 아직 감염되지 않은 경우 가짜 플러그인은 해킹 된 웹 서버에서 다운로드되어 피해자에게 토스트 메시지를 표시한 후 설치됩니다. updateApplication()은 해킹 된 동일한 서버에서 기본 바이너리를 다운로드하고 동적으로 로드합니다. 다운로드 된 파일(libSound1.1.so로 저장됨)은 메모리에 로드 된 후 삭제되고 마지막으로 트로이 역할을 하는 내보내기 기능을 실행합니다. 이전에 설명했듯이 이 파일은 이 게시물의 뒷부분에서 설명하는 가짜 플러그인에 의해 떨어진 파일과 유사합니다.
그림 5. 추가 페이로드 다운로드 서버
가짜 플러그인 : 이 가짜 플러그인은 파일 확장자 .mov로 해킹된 웹 서버에서 다운로드되며 미디어 파일처럼 보입니다. 설치 후 실행되면 플러그인이 성공적으로 설치됐다는 토스트 메시지를 (한국어로) 표시하고 playMovie()라는 네이티브 함수를 호출합니다. 가짜 플러그인의 아이콘은 곧 화면에서 사라집니다. asset 폴더 안에 저장된 LibMovie.so에 구현된 네이티브 기능은 libpng.2.1.so 파일로 가장하여 현재 실행 중인 앱의 디렉토리에 악의적인 트로이 목마를 떨어뜨립니다. 투하된 트로이 목마는 원래 LibMovie.so xor'ed에 내장되어 있으며 런타임 시 디코딩 됩니다. 권한을 부여한 후, 떨어뜨린 트로이 목마에서 내보낸 함수 "Libfunc"의 주소를 dlsym()을 사용해 동적으로 검색합니다. 파일 시스템에 떨어뜨려진 바이너리는 탐지를 피하기 위해 삭제되고, 최종적으로 Libfunc이 실행됩니다.
그림 6. 멜웨어가 설치 되었을 때 나오는 토스트 메시지
다른 포크로 연결된 프로세스에서는 설치된 SD 카드에 있는 "naver.property" 파일에 액세스하려고 시도하며, 만약 파일이 있다면, 구글 피싱 페이지(자세한 내용은 그 다음 섹션에서)를 표시하는 ".KakaoTalk" 활동을 시작하려고 합니다. 드로퍼의 전체적인 흐름은 다음 다이어그램에 설명되어 있습니다.
그림 7. 드로퍼의 실행 흐름
다음은 ".KaKaoTalk"활동이 내보내졌음을 보여주는 매니페스트 파일의 조각입니다.
그림 8. ".KaKaoTalk" 활동을 내보낸 것으로 정의하는 Android 매니페스트
JavaScript에서 피싱 : KakaoTalk 클래스는 감염된 장치에 등록된 사용자의 이메일 주소를 자동으로 기입한 로컬 HTML 파일인 javapage.html을 열어 자신의 계정에 로그인하도록 유도합니다.
그림 9. KakaoTalk 클래스가 악성 로컬 HTML 파일을 로드합니다.
피해자의 이메일 주소는 페이지 로드가 완료된 후 JavaScript함수 setEmailAddress를 통해 로컬 페이지에 기입됩니다. 가짜 한국 Google로그인 웹 사이트가 표시됩니다.
그림 10. 악의적인 JavaScript는 사용자 계정으로 만들어진 Google 로그인 페이지를 보여줍니다.
우리는 맬웨어 작성자가 Google의 합법적인 서비스를 이용하려는 다음과 같은 시도를 발견했습니다.
- 피해자의 Google 계정과 패스워드 훔치기
- 특정 계정에 대한 패스워드 복구 요청
- 새 Google 계정을 만들 때 복구 이메일 주소 설정
피싱 공격의 흥미로운 요소는 맬웨어 작성자가 Google의 합법적인 서비스에 복구 주소로 자신의 이메일을 설정하려고 시도했다는 것 입니다. 예를 들어 사용자가 피싱 페이지에서 새 Google 계정 만들기 링크를 클릭하면 맬웨어 작성자의 이메일 주소가 RecoveryEmailAddress의 매개 변수로 사용 된 제작 된 링크가 열립니다.
그림 11. 조작된 JavaScript는 새로운 Google계정 생성을 위한 복구 이메일 주소를 설정하려고 시도합니다.
다행히도 최종 사용자의 경우 위의 악의적인 시도는 성공하지 못합니다. 맬웨어 작성자의 이메일 주소가 있는 매개 변수는 계정 생성 단계에서 간단히 무시됩니다.
트로이 목마 : Google 피싱 페이지 외에도 가짜 플러그인이나 서버에서 다운로드 한 트로이 목마의 "Libfunc"기능이 실행되면 휴대 전화가 완전히 손상됩니다. 그것은 C2 서버의 하드 코딩 된 리스트에서 명령을 받습니다. 트로이의 주요 기능은 "doMainProc()"함수에서 구현됩니다. 다른 기능을 가진 트로이 목마의 몇 가지 변종이 있지만 전반적으로는 거의 동일합니다.
그림 12. C2서버의 하드 코딩된 목록
하드 코드 된 C2 서버의 위치 정보는 다음과 같습니다.
그림 13. C2 서버의 위치
doMainProc() 내에서 트로이 목마는 C2 서버로부터 명령을 수신하고 적절한 핸들러를 호출합니다. 아래의 스위치 블록의 일부는 이 트로이 목마가 어떤 종류의 명령을 지원하는지 우리에게 알려줍니다.
그림 14. 떨어뜨려진 트로이 목마에서 구현된 명령 처리기의 하위 집합
보시다시피, 그것은 보통의 트로이 목마가 가지고 있는 모든 기능을 가지고 있습니다. 단말기의 파일 다운로드, 업로드, 삭제, 원격 서버 등에 정보유출 등. 다음 표는 지원되는 C2 명령을 설명합니다.
그림 15. C2 명령어
명령 핸들링 루프로 들어가기 전에 트로이 목마는 서버에 장치 정보 파일을 보내고 장치의 UID를 확인하는 등 일부 초기화를 수행합니다. UID 체크가 1을 반환한 후에만 루프로 들어갑니다.
그림 16. 명령 루프에 들어가기 전 연결된 서버
이 명령들 중에서 특히 디렉토리 인덱싱이 중요합니다. 디렉토리 구조는 "kakao.property"라는 파일에 저장되며 사용자 장치에서 지정된 경로를 인덱싱 하는 동안 특정 키워드로 파일을 검사하고 일치하는 경우 파일을 원격 업로드 서버에 업로드합니다. 이 키워드는 한국어이며 번역 된 영어 버전은 다음 표와 같습니다.
그림 17. 검색 파일 키워드
키워드를 보면 맬웨어 제작자들이 군사, 정치 등과 관련된 파일을 찾고 있었다는 것을 알 수 있습니다. 이 파일들은 별도의 서버에 업로드됩니다.
그림 18. 키워드가 일치하는 파일이 업로드 되는 서버
결론
앱들은 사용자의 중요한 정보를 유출하기 전 쉽게 사용자를 속여서 설치하도록 유도할 수 있습니다. 또한 맬웨어가 공식 Google Play 스토어에 몰래 들어가 사용자가 자신의 기기를 보호하기 어려워지는 것은 흔하지 않은 일이 아닙니다. 이 맬웨어는 일반적인 피싱 시도가 아니라 매우 명확한 대상을 공격 하도록 작성되었으며, 피해자의 장치에서 군사 및 정치 관련 파일을 검색하여 기밀 정보 유출을 시도 할 가능성이 있습니다. 사용자는 신뢰할 수 있는 출처에서 다운로드 한 경우에도 완전히 신뢰할 수 있는 앱을 설치해야합니다.
McAfee Mobile Security는이 위협을 Android/MalBus로 탐지하고 이 위협이 있는 경우 모바일 사용자에게 경고하여 데이터 손실로부터 보호합니다. McAfee Mobile Security에 대한 자세한 내용은 https://www.mcafeemobilesecurity.com을 참조하십시오.
해시 (SHA-256)
초기 다운로더 (APK)
• 19162b063503105fdc1899f8f653b42d1ff4fcfcdf261f04467fad5f563c0270
• bed3e665d2b5fd53aab19b8a62035a5d9b169817adca8dfb158e3baf71140ceb
• 3252fbcee2d1aff76a9f18b858231adb741d4dc07e803f640dcbbab96db240f9
• e71dc11e8609f6fd84b7af78486b05a6f7a2c75ed49a46026e463e9f86877801
가짜 플러그인 (APK)
• ecb6603a8cd1354c9be236a3c3e7bf498576ee71f7c5d0a810cb77e1138139ec
• b8b5d82eb25815dd3685630af9e9b0938bccecb3a89ce0ad94324b12d25983f0
트로이 목마 (추가적인 페이로드)
• b9d9b2e39247744723f72f63888deb191eafa3ffa137a903a474eda5c0c335cf
• 12518eaa24d405debd014863112a3c00a652f3416df27c424310520a8f55b2ec
• 91f8c1f11227ee1d71f096fd97501c17a1361d71b81c3e16bcdabad52bfa5d9f
• 20e6391cf3598a517467cfbc5d327a7bb1248313983cba2b56fd01f8e88bb6b9
북한소행인가
육군본부가 계룡대인데요...
대구 무너지면 삼남 다 무너져요
- - - -
잘못된 정보입니다. 아래 투비세오님 대댓글 참고해주세요.
https://www.clien.net/service/board/park/13142907?od=T31&po=0&category=&groupCd=CLIEN
아이고.. 제가 오해를 했군요.
구글 계정이 털렸을까? 생각을 하기는 했는데, 소스 코드도 문제고, 키스토어 파일과 비밀번호는 어떻게.. 했는데, 깃 계정에 개발자 개발툴까지..... 작정하고 덤빈 셈이었군요.
구글 2차 인증 로그인은 역시 필수네요.
@투비세오님, 대댓글 정말 고맙습니다. (_ _)
https://www.bodnara.co.kr/bbs/article.html?num=125539
이런것과 같이 해킹된 android studio등으로 바꿔치기를 해서 빌드시에 악성코드가 숨어들어가게 했을 수도 있을 것 같네요.
혹은 계정이 종합적으로 털려서 git과 구글 계정 등이 다 털려서 해커가 최신 빌드 소스를 받아서 악성코드를 심고 다시 빌드해서 업로드를 했다던지요. 아니면 rdp가 털려서 자기도 모르는 새에 원격으로 작업이 이뤄졌다던지...
여튼 의도치 않은 사고일 것 같습니다.
@김선규님 // 저도 그 쪽일 것 같습니다. 그래서 개발툴은 항상 공식사이트에서만 받아야 하는데...왠지 공식사이트가 아닌 곳에서 받다가 생긴 참사가 아닐까 싶습니다 -_-;
사실 애초에 컴이 털린 상태라면 프록시 서버를 심어서 & ssl 인증서를 조작해서 공홈에서 받아도 해킹된 버전이 받아지도록 조작할수도 있겠지요. 여튼 평소에 컴퓨터의 해킹 여부를 꼼꼼히 살펴봐야 할 것 같습니다.
https://www.clien.net/service/board/park/13142907?od=T31&po=0&category=&groupCd=CLIEN
리명훈씨 ㄸㄸ
https://play.google.com/store/apps/details?id=com.busexpert.dgbus
저도 얼마 전 장려상 받을 때 장려상은 직접 표창할지 안할지 아직 모르겠다고 하다가 무산되어서 -_-;
애초에 공모전 신청할 때 연락 가능한 번호, 주소 제출해야해서... 전화로 수상 했다는 연락이랑 표창 혹시나 직접 못주게 되면 어떻게 받을지 물어보는 등등 전화 연락이 오니까 아마 개발자 본인은 확실하긴 할겁니다. 그러니 명예훼손에 걸릴 부분은 각도기 지참하시고 다들 조심하는게 나을 것 같습니다.
그런데 어찌 이제밝혀진건지 ㄷㄷ 맥아피 보안프로그램에 이상행위 탐지되서분석 한걸까요 ㄷㄷ
모공에 개발자분이 글 올리셨나 보네요.
구글 계정 해킹에
인증서 해킹에
개발툴 악성코드까지 심어져있었다고.. ㄷㄷ
git으로 소스 관리할 때
gradle 파일은 ignore 설정하지 않나요?
2개개 댓글 댓글 작업한 곳인데.....
국정원 아르씨에스(RCS), 이탈리아도 떠오르고...
Modify the Materials;Remove or alter any copyright or other proprietary notices contained in the Materials;Frame or utilize framing techniques, to display the Materials at a domain not owned by McAfee; orUse any McAfee-owned mark or product name as a meta-tag or other “hidden text” for search engines in a manner that does not inure benefit to McAfee.