앱을 배포하기 위해선 (플레이스토어에 등록하기 위해선) apk 에 꼭 서명을 해야한다. 키스토어를 생성, 앱에 서명을 해 서명된 apk와 jks 파일을 획득하는 과정과 keytool을 사용해 서명된 앱과 키스토어 파일에서 서명값을 확인하는 방법을 알아본다. 키스토어 생성 / 앱에 서명 / 서명된 apk 획득안드로이드 스튜디오의 Build>Generate Signed Bundle / APK... 를 클릭한다. 그리고 APK를 체크한 후 Next를 클릭한다. 키스토어를 생성하기 위해 Create new를 클릭한다. 키스토어 파일은 인증서라고 생각하면 된다. Key store path에서 아래 네모박스의 열기버튼을 클릭한다. 키스토어를 생성할 경로를 선택한 뒤 FileName에 파일명을 입력해준다. 그리고 나..
앱 위변조, 리패치징 (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..
drozer 다운로드 및 설치 2018년도 포스팅까지 파이썬 2.x 버전을 사용하라고 하는데 지금은 2020년이니까 3버전을 그대로 써볼까 했는데 2018년 이후로 drozer가 2.4.4 버전에서 업데이트가 되지 않았으므로 파이썬은 2.x 버전을 써야하는게 맞다. drozer 다운로드 사이트 링크 Drozer labs.f-secure.com 아래 drozer (Agent apk only)와 drozer (msi) 파일 2개를 다운로드받는다. apk 파일은 에뮬레이터이든 실제 단말기이든 모바일에 설치하고 msi는 윈도우에 설치할 것이다. 참고로 나같은 경우, 호스트가 윈도우10인데 방화벽을 다끄고 크롬, IE 둘다에서 다운로드 받아보았는데도 자꾸 '금지됨', '위협이 발견되어 삭제함', '네트워크 오류'..
안드로이드 액티비티 (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는..
안드로이드 백업 취약점 안드로이드 시스템에서 제공하는 백업에는 클라우드 백업과 전체 백업 지원하는데, 전체백업의 경우 사용자가 단말기를 분실하는 등 저장된 중요 정보나 파일이 외부로 유출될 가능성이 있으므로 취약하다. 전체 백업 설정은 AndroidManifest.xml 파일에서 할 수 있다. 인시큐어뱅크(InsecureBankv2) 앱의 경우 AndroidManifrest.xml에 다음과 같이 allowBackup 값이 true로 설정되어있기 때문에 전체 백업이 가능하다. 진단을 수행하기 전, 사용자가 인시큐어뱅크 앱 로그인 후 중요 기능 중 하나인 계좌이체를 수행했다고 가정해보자. Transfer 메뉴를 누른 후 From Account, To Account 작성, Get Accounts 를 누른다. ..