포스팅 내용

국내외 보안동향

Janus 취약점(CVE-2017-13156) 발견, 서명에 영향 없이 안드로이드 app 수정 가능

안드로이드 앱은 반드시 개발자가 앱에 서명을 해야합니다. 또한 패키지가 업데이트 되면, 업데이트 된 패키지의 서명과 기존 app의 서명이 동일해야만 안드로이드 OS에서 정상적인 업데이트를 허용해 줍니다. 만약 app이 악의적인 의도를 가진 누군가에 의해 수정이 되고, 리패키징이 되어도, 공격자는 원래 개발자의 개인키를 갖고있지 않기 때문에, 리패키징한 앱의 서명과 기존의 앱의 서명이 일치하지 않게되며, 결국 안드로이드 OS는 해당 패키지의 업데이트를 차단하게 됩니다. 이러한 매커니즘을 통하여, 매 업데이트마다 원래의 개발자가 진행하는 업데이트 라는 것을 보증할 수 있습니다. 하지만, Google은 올해 4월 안드로이드 취약점을 공개하였는데, 해당 취약점을 악용하면 공격자가 원래 앱의 서명에 영향받지 않는 선에서 app을 수정할 수 있게됩니다. 


해당 취약점의 근본 원인은, 하나의 파일이 APK 파일이며 DEX 파일일 수도 있기 때문입니다. 이러한 동시성은, APK 파일과 DEX 파일의 이원성을 위한 것인데, 마치 로마신화의 Janus를 연상시켜 이번 취약점은 Janus(CVE-2017-13156)로 명명되었습니다. 



Janus 취약점 원리


<이미지 출처 : http://www.androidpolice.com/2017/12/08/janus-vulnerability-allows-attackers-modify-apks-without-changing-signature-apkmirror-already-protected/>


공격자는 이러한 이원성(Janus 취약점)을 악용하여, APK 파일의 서명에 영향을 주지 않고 악성 DEX 파일과 원래의 APK 파일을 결합할 수 있습니다. 안드로이드가 동작할 때, 해당 악성 DEX 파일의 APK 파일을 기존 APP의 정상적인 업데이트 버전으로 간주하여 설치를 허용하며, DEX의 헤더부분부터 실행을 시작하는 것입니다. 여기에서의 DEX는 DEX 형식의 부합되는 임의의 파일일 수도 있으며, 공격자의 악의적인 코드가 포함되어 있을 수도 있습니다. 만약 "업데이트"가 된 app이 root 권한을 가진 APP, 예를들어 시스템 파일 등 이라면, 악성 앱은 해당 앱의 권한을 그대로 이어받아 사용자의 민감한 파일에 접근할 수 있게됩니다. 



영향받는 버전


JAR 서명을 기반으로 서명하는 모든 스키마(ver1)



영향받지 않는 버전


Android 7.0 이후 도입된 APK 서명 스키마 ver2



조치방안


사용자


안드로이드 OS 버전 업데이트

공식 마켓에서만 다운로드



개발자


App의 APK를 최신버전의 Signature scheme V2 서명 매커니즘으로 업데이트

APP APK 파일의 시작 바이트를 확인하여, APP이 변조되지 않았는지 확인








참고:

http://www.androidpolice.com/2017/12/08/janus-vulnerability-allows-attackers-modify-apks-without-changing-signature-apkmirror-already-protected/

https://source.android.com/security/apksigning/

https://thehackernews.com/2017/12/android-malware-signature.html

티스토리 방명록 작성
name password homepage