이번시간엔 '애플리케이션 패칭' 취약점에 대하여 포스팅하겠습니다.
['애플리케이션 패칭' 취약점 이란?]
> 현재 배포되고 있는 안드로이드 모바일 악성코드들은 정상적으로 서비스되고 있는 앱을 조작하여 사용자들을 유인합니다. 아이콘만 다른 앱에서 가져온 후 간단한 기능만 포함해 배포하는 사례도 있고, 공격자들도 앱을 처음부터 개발하는 것이 아닌 개발된 앱에다가 사용자의 개인정보를 빼내는 코드를 삽입후 재배포 하는 경우가 많습니다. 이런 행위를 위해 기존의 앱을 변질시켜서 피해자가 변질된 앱을 기존앱으로 착각하게끔 사용하는 공격이 '애플리케이션 패칭' 취약점 입니다!
1. 취약점 탐색
1. 앱을 디컴파일링 하여 살펴보시면 소스코드가 난독화 없이 그대로 노출되는 것을 보실 수 있습니다. 이러면 앱의 흐름을 따라가기 쉬울뿐더러 공격자가 원하는 조작을 위해 어느 부분을 수정해야하는지 파악하기 쉽기때문에 이 점을 취약점 포인트로 잡을 수 있습니다!
2. 그러면 앱의 코드를 수정후 리패키징 하여 Rooted Device!! 라는 문자를 Mooner Flag!! 라는 문자로 바꿔보겠습니다.
2. 공격과정
1. 우선 해당 링크를 통해 앱의 디컴파일링 파일을 추출 하는 APK Tool 과 추출된 파일을 서명하기 위한 방법이 나와있으니 해당 내용을 참고하셔서 따라오시면 됩니다!
https://ejxousiva.tistory.com/30
2. 우선 해당링크에서 다운받은 apktool.bat 파일과 apktool.jar 파일을 Windows 폴더에 넣어주었습니다. 이러면 cmd창에서 어느 디렉토리에 있더라도 해당 기능들을 쓸 수 있기 때문에 넣어준 것입니다.(원래는 이 파일들이 있는 디렉토리로 직접 이동해야만 사용가능하지만 Windows 폴더에 넣으면 그럴 필요가 없음!)
3. 이후 위에 링크 내용대로 서명키를 생성하게 되면 이와같이 keystore 라는 파일이 생성이 되게 됩니다. 저는 repak 이라는 폴더에 InsecureBankv2.apk(원본파일) 를 넣어주고 keystore 파일을 만들어주었습니다. 이렇게 셋팅하면 리패키징을 할 준비가 완료되었습니다!
4. 해당 명령어를 통해 앱을 디컴파일 추출할 수 있습니다!
> apktool d InsecureBankv2.apk -o EditsecureBank
(InsecureBankv2.apk 앱을 디컴파일링 하여 추출한 파일을 현재 디렉토리에 EditscureBank 라는 이름의 폴더에 저장한다)
명령어 실행 후 | 디컴파일된 추출 파일 확인 |
5. EditsecureBank 폴더를 들어가보시면 저희가 Jadx로 봤던 소스코드 파일들이 그대로 들어있는 것을 확인하실 수 있습니다. 리패키징에서 수정하는 코드는 smail 을 통해 수정을 해야합니다. smail 폴더로 들어가보죠!
6. smail > com > android > insecurebankv2 경로로 이동하셔서 PostLogin.smail 파일을 메모장으로 열어주세요!
7. 메모장 검색 기능으로 Smail 파일에서 저희가 수정해야할 "Rooted Device!!" 부분을 찾았습니다! 이 부분을 Mooner Flag!! 로 바꿔주겠습니다.
8. 해당 명령어를 통해 수정된 디컴파일 폴더를 다시 apk 파일로 변환시켜줍니다. (리패키징)
> apktool b [리패키징 할 폴더명] -o [리패키징 후 만들어질 어플명]
9. 다시 폴더로 돌아가보시면 리패키징된 EditsecureBank.apk 파일을 확인하실 수 있습니다.
10. 리패키징을 하게되면 원래있던 서명이 사라지게 됩니다. 이 서명은 앱을 다운로드하는데 있어서 필수적인데 Insecure bank 앱을 다운로드 받을때 따로 요구되는 서명은 없기 때문에 저희가 임의로 서명key를 만들어서 서명을 해도 다운로드가 가능해집니다. 실제로 아래 사진에서 왼쪽은 원본파일이고 오른쪽이 리패키징한 파일인데 META-INF 라는 서명키가 적힌 파일이 리패키징한 파일엔 없는것을 확인하실 수 있습니다!
실제로 서명을 안하면 아래와 같이 녹스에 설치하려 해도 어플설치 실패라고 뜹니다!
드래그 앤 드롭으로 리패키징 어플 설치 시도 | 어플설치 실패 문구 확인 |
11. 초반에 링크에서 만들어 두었던 keystore 파일을 여기서 쓰게 됩니다. 해당 명령어를 통해서 EditsecureBank.apk 파일에 서명을 해줍니다. (좀 복잡해 보이는 것 같아도 막상 해보면 그리 복잡한게 아니니 두려워 말고 해보세요...)
> jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore [mooner.keystore] -storepass [keystore 비밀번호] -keypass [keystore 비밀번호] (리패키징할 apk).apk [alias 옵션에 적었던 keytore 별칭]
아래와 같은 문구가 뜨면 서명 성공!
12. 서명을 완료하니 Nox에 드래그 앤 드롭으로 다운로드가 가능해진 것을 확인하실 수 있습니다!!
13. EditsecureBank로 들어와 다시 로그인을 하면 저희가 수정한 문구인 "Mooner Flag!!"를 확인할 수 있습니다!
3. 대응방안
1. 소스코드 난독화
> 난독화 기술을 클래스 , 메서드 , 필드 등의 이름을 악의적인 목적으로 사용하는 것을 방지하고 , 분석을 어렵게 하기 위해 사용합니다. 안드로이드 스튜디오에서는 기본적으로 앱 난독화 도구인 프로가드를 제공합니다!
- 안드로이드 스튜디오에서 Gradle Scripts > build.gradle 파일에 buildTypes 클래스에다가 minifyEnabled="true" 설정을 해주시면 난독화를 적용할 수 있게됩니다!
- 프로가드는 오픈소스이기 때문에 당연히 상용 솔루션에 비해선 일부 기능이 제한되어 있습니다...하지만 무료입니다!.
보안을 더 강화하기 원한다면 덱스가드 라는 상용 솔루션을 통해 한층 더 복잡한 난독화 기능을 사용할 수 있습니다.
2. 무결성 검증
> 앱이 원본파일에서 수정이 되었나 안되었나를 판단하는 무결성 검증과정을 추가해야합니다. 검증방식으로는 CRC(Cyclic Redundancy Check) 체크섬 검증, 개발자 사이닝 키(Developer Sinning Key) Hash 값 검증, 리소스 파일 검증 등이 있습니다. 무결성 검증도 솔루션이 있으니 이런 도구들을 적절히 사용하여 자사의 앱을 보호해야 합니다!
긴 글 읽어주셔서 감사합니다!
'모바일 앱해킹(Android) > Insecure Bank' 카테고리의 다른 글
[Insecure Bank] 안전하지 않은 로깅 메커니즘 취약점 (0) | 2024.12.08 |
---|---|
[Insecure Bank] 메모리 내 민감한 정보 저장 (0) | 2024.12.06 |
[Insecure Bank] 취약한 웹 뷰 실행 (0) | 2024.12.05 |
[Insecure Bank] 안전하지 않은 콘텐츠 프로바이더 접근 (0) | 2024.12.04 |
[Insecure Bank] 루팅 탐지 및 우회 (0) | 2024.12.02 |