앱 위변조, 리패치징 (Repackaging) 취약점 인시큐어뱅크(InsecureBanckv2) 깃허브에 기재되어 있는 취약점 리스트의 취약점 명명은 '어플리케이션 패칭 (Application Patching)'인데 우리나라에서는 앱 위변조나 리패치징이라는 말을 더 많이 쓰는 것 같아서 이걸 사용했다. 리패키징 취약점이 되려면 앱 위변조 뿐 아니라 설치 시 서명검증에 사용되는 서명키가 노출되어있거나 하는 방식으로 서명키를 알고있어야 한다. 그래야 재배포가 가능하기 때문인데 (플레이스토어에서 서명검증을 하기 때문) 인시큐어뱅크에서는 서명키 노출 취약점이 따로 있지는 않다. 따라서 안드로이드 스튜디오에서 생성한 서명키 파일(jks)로 변조한 앱에 직접 서명해주는 방식을 사용하도록 하겠다. 안드로이드 스튜디오..
안드로이드 메모리 덤프 취약점 진단 인시큐어뱅크(InsecureBankv2) 앱을 실행시킨 후 ps 명령어로 pid를 찾아준다. pid처럼 보이는 숫자 4개가 연속되어있는데 첫번째 값이 인시큐어뱅크 앱의 pid 값이다. 그리고 덤프 저장을 위해 /data/data에 tmp 폴더를 생성해주었다. # ps | grep insecure # mkdir /data/data/tmp 을 사용해 hprof 확장자로 덤프를 생성해준다. # am dumpheap 18138 /data/data/tmp/insecure.hprof # exit > adb pull /data/data/tmp/insecure.hprof 그리고 strings64.exe를 사용해 내부의 문..
안드로이드 내부저장소/외부저장소 안드로이드 저장소는 내부저장소/외부저장소로 나뉘는데 여기서 외부저장소는 SD카드와 같은 이동식 저장소를 의미한다. 앱자체가 지나지케 클 경우 외부저장소에 앱을 설치하기도 하고 접근제한이 필요치 않거나 다른 앱과 공유하고 싶은 파일이 있을 경우 해당 파일을 외부저장소에 저장하기도 한다. 내부저장소는 다른 앱이 접근하지 못하지만 SD카드는 설정에 따라 외부에서도 접근할 수 있는 저장소이기 때문에 SD카드에 중요정보가 노출될 수 있는 가능성이 존재한다. SD카드 저장소는 /sdcard 에서 확인할 수 있다. 안드로이드 SD 카드 저장 취약점 진단 AndrioidManifest.xml 을 확인하면, "WRITE_EXTERNAL_STORAGE" 와 "READ_EXTERNAL_STO..
개발자 백도어 취약점 백도어는 워낙 큰 개념이라 정의하기 나름인 느낌이지만 일반적인 인증을 거치지 않고 접속하는 방법이라고 할 수 있다. 보안에서의 백도어는 서버해킹 후 원격에서 쉽게 접속하려고 포트를 열어놓는 느낌이라면 개발자 백도어는 유지보수를 하거나 할 때 시간을 단축할 목적으로 만들어놓는 경우이다. 개발자 백도어 취약점 진단 과정 침해과정 분석이 아니므로 열린 포트가 있는지 등을 확인하는 문제는 아니고 인증 부분 관련 소스를 보고 인증을 우회하거나 피할 수 있는 로직?이 있는지 확인해야 한다. 자바 코드는 아직도 보기가 힘들지만, username이 devadmin인지 확인하고 맞으면 httpPost2에 대한 응답값을 내려주고 있다. 비밀번호 없이 devadmin ID 입력만으로 로그인에 성공하는 ..
HTTP 통신과 파라미터 조작 취약점을 하나로 묶어 포스팅하려 한다. 인시큐어뱅크(InsecureBankv2)의 깃허브에 나와있는 취약점 명칭 그대로 썼는데 KISA에서 나온 가이드 기준으로 보면, '중요정보 평문 전송 취약점'이라고 할 수 있을 것 같다. HTTP 통신 및 파라미터 조작 취약점 진단 요즘 HTTP 통신을 하는 곳이 있을까 싶을정도로 HTTP 통신은 보안을 전혀 고려하지 않은 프로토콜이라는 것은 보안을 하는 사람이라면 누구나 알고있을 것이다. 평문 전송을 하기 때문에 정보 유출은 당연하고 입력값 검증을 하지 않는다는 가정하에 조작도 가능하게 된다. 먼저, 프록시 설정부터 수행해준다. 녹스 에뮬레이터 기준으로 설정>WiFi 에서 WiredSSID 를 길게 클릭하면 아래와 같이 WiredSS..
안드로이드 웹뷰 (Webview) 취약점 웹뷰는 웹페이지를 보여주는 뷰(view) 기능을 하는 안드로이드 컴포넌트 중 하나로, 자바스크립트를 지원하기 때문에 잘못 구현할 경우 웹의 XSS와 같은 취약점이 발생할 수 있다. 안드로이드 웹뷰 (Webview) 취약점 진단 디컴파일된 jar파일을 JD-GUI로 열어 webView가 사용된 곳을 확인해보자. ViewStatement 클래스의 onCreate 함수에서 webView가 사용되고있다. 이전에 인시큐어뱅크 앱의 Transfer 기능을 사용해보면서 이체 기록이 'View Statement'에 기록이 되는 것을 확인했다. 즉, Transfer 기능에 입력할 수 있는 입력값 중 스크립트 구문을 넣으면 View Statement 확인시 클라이언트 단에서 입력해..
컨텐츠 프로바이더 (Content Provider) 취약점 컨텐츠 프로바이더 (Content Provider)란, 다른 앱이 데이터베이스에 접근할 수 있도록 도와주는 역할을 한다. 컨텐츠 프로바이더는 앞서 살펴본 안드로이드 액티비티와 비슷하게 AndroidManifrest.xml에서 로 선언할 수 있다. 컨텐츠 프로바이더 취약점이 존재하게 되면, 데이터베이스에 접근할 권한이 없는데도 데이터베이스에 접근이 가능할 수 있게된다. 컨텐츠 프로바이더 (Content Provider) 취약점 진단 액티비티 취약점 진단과 비슷하게 android:exported="true"로 설정되어있는지 확인하면 된다. 인시큐어뱅크 앱의 AndroidManifest.xml의 를 살펴보면, 아래와 같이 .TrackUserConten..
안드로이드 액티비티 (Activity) 취약점 안드로이드에서 액티비티란 앱 UI를 제공하는 앱 컴포넌트로써 쉽게 말하면 하나의 화면이라고 생각하면 될 것 같다. 액티비티 취약점이 존재하면 공격자가 액티비티를 호출할 권한이 없는데도 강제로 호출할 수 있게 된다. 즉, 권한이 없는 기능을 사용할 수 있게된다. 액티비티는 리시버와 비슷하게 AndroidManifest.xml에서 로 선언할 수 있다. 안드로이드 액티비티 (Activity) 취약점 진단 위에서 본대로 여러 액티비티가 존재하는데 그 중, DoTransfer 액티비티에 로그인 없이 바로 접근 가능한지 확인해보겠다. adb로 안드로이드 쉘에 접근해준 후 am명령어를 사용해준다. adb의 am 명령어를 사용하면 액티비티를 실행시킬 수 있는데 (inten..
안전하지 않은 로깅 취약점 진단 adb devices로 연결된 디바이스를 확인한 후 로 쉘에 들어간다. 그 후 logcat을 입력하면 발생하는 로그들을 주르르르륵 출력된다. 아니면 처음부터 을 수행해도 된다. 로그인 수행 시, 아래와 같이 계정정보가 평문으로 로그에 기록되는 것을 볼 수 있다. > adb shell $ logcat 계좌이체 또한 마찬가지로 계좌이체 정보가 평문으로 로그에 기록된다. DoLogin 클래스를 확인해보면, 암호화되기 전의 유저네임과 패스워드가 로그로 기록되는 부분을 볼 수 있다. Log.d의 d는 로그 레벨로 Debug를 의미하며 Log.d의 첫번째 인자는 tag이고 두번째 인자가 로그로 출력될 메시지이다. DoTransfer는..
로컬 암호화 이슈 (Local Encryption Issue) 인시큐어뱅크에는 몇가지 로컬 암호화 이슈가 존재한다. 로컬 암호화 이슈란 중요정보를 단말기에 저장할 때 취약한 암호화 알고리즘을 사용하거나 평문으로 저장해서 발생하는 이슈를 말한다. 먼저 로그인하는 과정이 필요한데 아래 포스팅에서 녹스 에뮬레이터 설정 및 인시큐어뱅크 서버 구동, 로그인 방법을 참고하길 바란다. [인시큐어뱅크] 녹스 에뮬레이터를 사용한 취약점 진단 환경구축 [인시큐어뱅크] 녹스 에뮬레이터를 사용한 취약점 진단 환경구축 인시큐어뱅크 앱을 사용해 안드로이드 모바일 취약점 진단 공부를 해보기 위해 녹스 에뮬레이터를 사용해 취약점 진단 환경 구축을 해볼 것이다. 다음과 같은 순서대로 차근차근 진행해보자. 인시큐어뱅크(Insecur....
PE 파일을 IDA와 같은 툴을 사용해 디컴파일하듯, apk 파일도 디컴파일을 할 수 있는 방법이 있는데 그 중 가장 무난히 많이 사용되는 방법이 dex2jar 툴을 사용하는 것이다. 이름 그대로 dex -> jar 로 변경해주는 툴인데 그전에 dex란 뭔지부터 간단히 살펴본다. DEX(Dalvik Excutable)란 윈도우 실행파일이 PE파일인 것처럼, 안드로이드의 실행파일은 dex이다. d가 dalvik인 것에서 알 수 있듯이 안드로이드는 dex 파일을 달빅이라는 가상머신에서 구동시킨다. 달빅 가상머신은 모바일 기기에서 메모리를 적게 사용하면서 실행파일이 구동되도록 하는 최적회된 가상머신이라고 생각하면 된다. 참고로 이 달빅 가상머신은 OS에 하나가 있는 것이 아니라 구동되는 어플리케이션마다 생성이..