
CVE-2017-13156-Janus 재현
공격자는 Janus 취약점(CVE-2017-13156)을 이용해 Android 시스템의 signature scheme V1 서명 메커니즘을 우회하고, 앱 서명에 영향을 주지 않고 애플리케이션 코드를 임의로 수정할 수 있습니다. Android의 서명 메커니즘은 앱이 변조되는 것을 방지하는 데 사용됩니다. 일반적으로 앱이 수정되면 서명을 다시 해야 하며, 그렇지 않으면 기기에 설치할 수 없습니다. 앱 설치 시 시스템은 apk의 서명을 검증하며, 서명이 없거나 검증에 실패하면 설치를 거부합니다. 공격자는 개발자의 개인 키가 없으므로 다른 개인 키로 해당 앱을 다시 서명하게 되며, 이때 서명이 일치하지 않는 상황이 발생합니다. 앱의 서명 검증을 통해 변조 여부를 어느 정도 확인할 수 있습니다. 그러나 Janus 취약점은 공격자가 서명에 영향을 주지 않고 앱을 변조할 수 있게 하므로, 이렇게 2차 개발된 앱이 공식 앱을 덮어쓸 수 있어 일정 수준의 위험을 초래합니다.
저작권은 저자에게 있습니다. 상업적 전재는 저자의 허가를 받아야 하며, 비상업적 전재는 출처를 명시해 주시기 바랍니다.
영향 범위: Android 5.0-8.0
.
|____a.dex 수정된 dex
|____target.apk 수정된 apk
|____app
|____janus.py 수정 스크립트
|____Janus.jar 수정된 jar
|____cla.dex 수정된 dex
|____README.md
|____a.apk
|____f.apk
|____app-release.apk 원본 apk
jar:
java -jar Janus.jar Janus [dex_file] [apk_file] [output_file]
java -jar Janus.jar Janus a.dex app-release.apk a.apk
python:
python janus.py [dex_file] [apk_file] [output_file]
> python janus.py a.dex app-release.apk a.apk
시도 단계:
1.원본 apk 생성
2.baksmail로 smali 디컴파일 후 문자열 수정
3.smali를 다시 dex로 패키징
4.poc를 사용해 새 apk 생성
5.toast 추가
6.log를 더 많이 작성하고 log 비교
7.먼저 기존 java에서 수정한 다음 새 apk를 컴파일하고, 새 apk의 dex를 주입해 확인해 볼 수 있습니다
8.수정된 dex 안에 고유한 함수를 하나 만들고, hook이 된다면 실행된 것을 의미합니다
6.0.1 샤오미 휴대폰에서 시도, 테스트 실패 설치 성공, 코드 실행 안 됨
6.0.1 nexus 휴대폰에서 시도, 테스트 실패 설치 성공, 코드 실행 안 됨
4.4.3 sony 휴대폰에서 시도, 테스트 실패 설치 실패
휴대폰에 패치가 적용된 것으로 추정
다른 사람의 재현
python poc
java poc
Janus 서명 취약점(CVE-2017-13156) 원리와 이용 분석
Antiy 모바일 보안: Janus 고위험 취약점 심층 분석
Janus 취약점 분석