목록Mobile App Penetesting (29)
외로운 Nova의 작업실
- 취약점 소개 취약한 패스워드 변경 실행은 패스워드 변경 과정에서 발생하며, 개발자의 실수로 불필요한 로그를 남겨 패스워드를 노출하는 취약점 입니다. - 취약점 진단 nox에서 비밀번호를 변경합니다. Nova@123$ -> Jack@123$ 서버쪽에 비밀번호가 평문으로 남는 것을 확인할 수 있습니다. 또한 logcat을 하게되면, 핸드폰 자체의 로그에도 비밀번호가 평문으로 되는 것을 볼 수 있습니다. 이와 관련한 코드를 봐보겠습니다. @app.route('/changepassword', methods=['POST']) def changepassword(): #set accounts from the request Responsemsg="fail" newpassword=request.form['newpas..
- 취약점 소개 개발자들이 유지보수나 디버깅시 인증을 회피할 목적으로 만든 백도어가 있을 수 있습니다. 이러한 개발자의 백도어가 공격자에게 발견되면 시스템에 큰 위험을 초래할 수 있습니다. - 취약점 진단 과정 DoLogin$RequestTask.class 코드를 보겠습니다. package com.android.insecurebankv2; import android.content.Intent; import android.content.SharedPreferences; import android.os.AsyncTask; import android.util.Base64; import android.util.Log; import java.io.BufferedReader; import java.io.IOExce..
- 취약점 소개 로그인 에러메시지에서 계정이 없는 경우, 비밀번호가 틀린경우에따라 에러메시지가 다르다면, 이를 이용해서 사용자 계정 목록을 획득할 수 있는 취약점을 말합니다. - 취약점 분석 먼저 계정이 없는 경우 에러메시지를 보겠습니다. User Does not Exist라는 에러메시지가 나옵니다. 이제 패스워드가 다른 경우를 보겠습니다. Wrong the password라는 에러메시지가 나옵니다. 이제 올바른 경우를 보겠습니다. Correct Credentials라는 메시지가 나옵니다. 이러한 정보를 토대로 서버에 저장된 사용자의 계정 및 패스워드등을 알아낼 수 있습니다. - 취약점 대응 방안 로그인 실패시 메시지는 상세한 피드백을 제공하지않고 포괄적으로 대응해야합니다. 로그인 시도 속도를 제한하여 ..
- 취약점 소개 하드코딩이란 패스워드나 중요 정보 또는 암호화키를 불러오지않고 직접 코드내에 써넣는 것을 말합니다. 이처럼 하드코딩을 하게되면 디컴파일 했을때 중요 정보나 패스워드등을 노출할 수 있습니다. - 취약점 진단 과정 디컴파일 후 소스코드에 중요정보가 있는 지 확인합니다. public void postData(String valueIWantToSend) throws ClientProtocolException, IOException, JSONException, InvalidKeyException, NoSuchAlgorithmException, NoSuchPaddingException, InvalidAlgorithmParameterException, IllegalBlockSizeException, ..
- 취약점 소개 안드로이드 애플리케이션에서 요청하는 값을 중간에서 가로챈 후 매개변수 값을 변조하여 전송할 수 있는 취약점 입니다. - 취약점 진단 프록시서버로 로그인 패킷을 잡아보겠습니다. 정상적으로 로그인이 되어야하지만, 패스워드를 변경하여 패킷을 조작해 서버로 보내보겠습니다. 그러면 서버에서 응답이 옵니다. 사용자 입장에서는 올바른 패스워드를 입력했지만 로그인이 안됬음을 느낄 것입니다. 이처럼 패킷의 파라미터를 조작할 수 있습니다. 이번에는 계좌이체를 조작해보겠습니다. 999999999 계좌에서 555555555계좌로 10000원을 보내고 있습니다. 이를 99999로 변경해보겠습니다. 이제 statements 액티비티를 보게되면 10000원을 보낸걸로 되어있습니다. 실제로는 99999를 보냈음에도 ..
- 취약점 소개 앱이 서버와 통신을 할때 HTTP 프로토콜을 이용하면 패킷이 암호화되어있지않아 스니핑 공격을 통해 패킷 정보를 탈취할 수 있습니다. - 취약점 진단 안드로이드에서 패킷을 보는 방법은 프록시를 사용하는 방법과 네트워크 상에서 패킷 정보를 확인하는 방법이 있습니다. 프록시를 사용하는 방법은 버프스위트를 사용하며 네트워크 상에서 패킷 정보를 확인하는 방법은 안드로이드 앱에서 tPacketCapture 앱으로 패킷을 캡처하고 이 캡처본을 와이어샤크를 통해 보는 방법입니다. 해당 블로그에서는 버프스위트를 사용하여 프록시로 패킷을 봐보겠습니다. 먼저 버프스위트를 다운로드해줍니다. https://portswigger.net/burp/community-download-thank-you Upgrade y..
- 취약점 소개 어플들은 중요 정보나 설정들을 저장소에 저장합니다. 이때 외부저장소를 사용할 경우 아무나 해당 정보에 접근할 수 있고 내부 저장소에 저장하더라도 암호화가 되어있지않으면 정보를 탈취당할 수 있습니다. 보통 어플들의 저장소는 아래와 같은 경로에 있습니다. /mnt/sdcard : 외부저장소로 누구나 쓰고 읽고 할 수 있습니다. /data/data/앱이름 : 내부저장소로 앱에 관련된 유저만이 읽고 쓸 수 있습니다. 또한 /data/data/앱이름 경로에서 중요하게 봐야할 디렉터리는 아래와 같습니다. databases : SQLite 데이터베이스 파일로 설정파일, 콘텐츠 파일등을 저장합니다. shared_prefs : 공유 프리퍼런스로 많이 사용하며 앱에 공유되는 설정파일등을 저장합니다. - 취..
- 취약점 소개 전에 매니페스트 파일의 debuggable 속성을 true로 하면 안됨을 배웠습니다. 만약 true로 하게되면 디버깅을 통해 악의적인 행동을 할 수 있습니다. 이번에는 디버깅을 통해 런타임 조작이 어떻게 이루어지는지 알아보겠습니다. 악의적인 행동은 로그인 없이 dinesh 유저의 패스워드를 변경하는 것입니다. - 취약점 진단 먼저, 녹스플레이어에서 인시큐어뱅크 앱이 사용하고 있는 포트를 알아냅니다. adb jdwp 저는 4202 포트입니다. 이포트를 포트포워딩해줍니다. adb forward tcp:1111 jdwp:4202 이제 jdb를 이 포트에 붙여줍니다. jdb -connect com.sun.jdi.SocketAttach:hostname=localhost,port=1111 그러면 디..
- 취약점 소개 안드로이드는 로컬 컴퓨터에 백업을 해놓을 수 있는 기능이 있습니다. 이때 백업 파일을 위변조할 수 있는 취약점이 있습니다. - 취약점 진단 먼저 실제 백업을 해보겠습니다. adb를 이용해서 백업을 진행해줍니다. 원래는 전체백업이 이루어지지만 명령어를 사용해서 인시큐어뱅크 앱만 백업해줍니다. adb backup com.android.insecurebankv2 -f insecurebankv2.ab 이러면 아래처럼 녹스에서 화면이뜹니다. 비밀번호 입력 안해도도되고 백업을 수행해줍니다. 이제 ab파일을 보기위해서는 어패킹을 해줘야합니다. 이때 사용되는 프로그램이 abe입니다. abe.jar파일은 아래에서 다운받을 수 있습니다. https://github.com/nelenkov/android-ba..
- 취약점 소개 매니페스트 파일에 debuggalbe 이 true로 설정되어 있으면 중대한 보안 결함이 발생할 수 있습니다. - 취약점 진단 매니페스트파일을 보겠습니다. dz> run app.package.manifest com.android.insecurebankv2 application 태그 부분을 보겠습니다. 보게되면 debuggable이 true로 되어있습니다. 이는 보안 위협을 줄 수 있습니다. 이와 관련해서는 다음에 배워보겠습니다. - 취약점 대응방안 앱을 배포하기전에 매니페스트파일의 debuggable 부분을 체크하고 false로 설정합니다.