SaaS 어플리케이션, 모바일 어플리케이션, 클라우드 어플리케이션, IoT 등, 한 기업이나 개인이 사용하는 어플리케이션의 개수가 점점 늘어나면서 한 명의 사용자가 사용하는 계정의 개수가 기하급수적으로 늘어나고 있다. 게다가 각 어플리케이션에서 사용하는 ID와 패스워드 규칙은 각각 너무 다르다. 어떤 어플리케이션에서는 패스워드에 숫자를 넣으라 하고, 어떤 곳에서는 10자리가 넘어야한다 하고, 또 특수문자를 두개 이상 넣어야 한다는 곳도 있고... 

 

사용자 개인으로서도 너무 많은 계정을 사용하고 있어서(아마 인터넷 상에서 지금까지 생성한 계정이 200개는 훌쩍 넘을 것 같다), 오랜만에 사용하는 경우, ID 찾기나 패스워드 찾기 절차를 거쳐야만 로그인이 가능하다.

 

이러한 고민은 비단 개인만의 문제가 아니다. 

기업의 규모가 조금만 커져도, 한 사무직 근로자가 업무 상에 사용하는 어플리케이션의 수가 10개는 훌쩍 넘을 것이다. 그러면 한 근로자가 사용하는 계정의 수도 10개, 어플리케이션 관리자가 관리해야 하는 플랫폼도 10개 이상이라는 말이다.

 

현재 큰 규모의 회사에서는 이러한 문제점을 해결하기 위해 SSO(Single Sign On) 기술을 통해 한 플랫폼에서 한 개의 계정만으로 중요 페이지에 접근이 가능하도록 하는 방법을 사용하고 있다. 하지만 각 어플리케이션 별로 계정이 별도로 관리되어야 하는 것은 동일하며, 각 부서에서 사용하는 모든 어플리케이션에 SSO을 적용할 수 없는 상황이라 이마저도 중구난방식으로 관리되고 있다. 

 

그래서 최근에 사용자 계정과 관련된 주제를 한 플랫폼에서 관리하고 적용할 수 있는 Identity & Access Management(IAM)이라는 분야가 점점 관심을 받고 있는 것 같다. 한국에는 아직 이 분야를 전문적으로 다루고 있는 서적이나 회사가 없을만큼 많이 성장하지 않았고 익숙치 않은 분야일 수도 있다. 혹자는 이러한 개념은 이미 오래전부터 실무에 도입되어 있었던 것이라고 말할 수도 있다. 하지만 확실한 것은 IAM 분야에서 다루고 있는 다양한 주제들이 중앙집중화된 플랫폼으로 관리되고 있는 회사는 거의 없을 것 같다. 


앞으로 IAM과 관련된 개념 및 주제 등을 하나씩 차근차근 포스팅할 예정입니다.

 

글을 쓰는 저도 IAM이라는 분야에 아직 익숙하지 않고 기술적으로 부족한 점이 많으며, 많은 자료가 영어로 되어있으므로 이를 번역하는데 실수가 있을 수도 있으니, 이해되지 않거나 틀린 부분이 있다면 댓글이나 DM 부탁드립니다. 

0. 환경

 - Python 3.8

 - Fridump3

* python2버전의 경우 fridump를 python3버전의 경우 fridump3 다운로드

https://github.com/rootbsd/fridump3

 

rootbsd/fridump3

A universal memory dumper using Frida for Python 3 - rootbsd/fridump3

github.com

1. 현상

 - 정상적으로 frida server가 동작하고 있고, frida -U, frida-ps -U 등의 명령어가 정상적으로 실행 가능함.

 - fridump3.py 실행 시 device not found! 오류 발생

 

2. 해결책

 1) fridump3.py 파일을 연다

 2) frida.get_usb_device()부분을 찾아 찾아 frida.get_usb_device(1)로 수정한다. 

if USB:
        session = frida.get_usb_device(1).attach(APP_NAME)

3) 끝---!

안드로이드 누가(Nougat, Android 7.0) 이후 부터는 사용자가 사설 인증서를 등록하면 루트 인증서로 설치가 되지 않고 사용자 인증서로 설치가 되서 신뢰할 수 있는 인증서로 인식을 하지 않아 SSL Connection 오류가 난다. 

안드로이드 OS 자체적으로 SSL-Pinning을 하고 있다고 생각하면 된다.

 

IOS도 동일한 현상이 일어나서 확인할 결과 IOS는 자체적으로 사설 인증서를 루트 인증서로 신뢰할 수 있도록 만드는 기능을 만들어 놓았었다(간편함...** IOS 10 이상에서 SSL 인증서 등록이 필요한 경우는 아래 포스팅 참고)

https://securitynote.tistory.com/44?category=788948

 

[iOS] ios 버전 10+ Burp SSL 인증서 등록

SSL 통신 프록시 연결 오류 최근 IOS 10 이상 버전에서 BURP 인증서 등록 후, SSL 통신을 잡는데 에러가 일어나서 무슨 새로운 솔루션이 생겨난줄 알았다... 그런데 그런게 아니었나 보다...!! 일단 지금 상태는..

securitynote.tistory.com

하지만 안드로이드는 그런 기능을 지원하지 않으므로 Frida를 이용해 SSL-Pinning을 우회해야 한다.

 

0. 환경

  - Python 3.8 

  - 루팅된 Android 10 (Android 7 이상 모두 사용가능)

1. 환경 세팅(frida 세팅)

 

1) PC 파이썬 설치 후 pip install을 통해 frida와 frida-tools를 설치한다.

pip install frida
pip install frida-tools

2) MOBILE adb 연결 후 모바일 기기의 Bit 및 Type 확인

첫번째 명령어만으로도 확인 가능

Bit > adb shell getprop ro.product.cpu.abi
Type > adb shell getprop ro.product.cpu.abi2

 

3) frida-server 다운로드

아래 링크 접속 후 기기 버전에 맞는 frida-server 다운로드 

https://github.com/frida/frida/releases

 

frida/frida

Clone this repo to build Frida. Contribute to frida/frida development by creating an account on GitHub.

github.com

단, 녹스를 사용할 경우, arm이 아닌 32bit로 다운받아야한다!!

 

4) 기에 frida-server 이동

 - PC 다운받은 압축 파일을 푼다.

 - PC 압축 해제한 파일 내 위치한 바이너리 파일명을 "frida-server"로 변경한다. 

    -> 굳이 안바꿔도 되지만 실행하기 훨씬편함

 - MOBILE adb 명령어를 통해 "frida-server" 파일을 모바일 기기의 /data/local/tmp 파일로 옮긴다.

adb push frida-server /data/local/tmp

 - MOBILE /data/local/tmp로 옮겨진 "frida-server" 파일에 실행권한을 준다.

# chmod 777 /data/local/tmp/frida-server

 - MOBILE frida-server 실행

# ./frida-server &

 

2. Android용 SSL-Pinning 우회 코드 저장

이제 frida 환경 세팅은 끝났다. 아래 링크로 접속하여 Android용 SSL-Pinning 코드를 다운받고 원하는 경로에 .js 확장자로 저장한다. 나는 frida-ssl-and.js로 저장했다.

https://codeshare.frida.re/@pcipolloni/universal-android-ssl-pinning-bypass-with-frida/

 

Frida CodeShare

 

codeshare.frida.re

3.PC 후킹하고 싶은 앱의 PID 혹은 패키지명 확인

frida-ps -U

4.PC 후킹

frida -U -l frida-ssl-and.js --no-pause -f [패키지명]  //패키지명을 통한 후킹

5. 끝!

이제 SSL 패킷도 잘~ 잡힐 것이다~!!

 


첨부된 사진이 없어 진행에 어려움이 있으신 분들은 댓글 남겨주세요ㅠㅠ 

파이썬3을 사용해서 안되는 것이 거의 없어졌지만 여전히 파이썬 버전2를 사용해야 되는 것들이 간혹 있다...

예를 들면 드로저 같은...?

그래서 파이썬 2.7과 파이썬 3버전을 동시에 설치해놓고 사용할 수 있도록 만드는 방법을 찾아봤다.


1. 파이썬 2.7 버전 설치

   그냥 디폴트값으로 설치하면 된다. 

   설치 경로는 C:\Python2.7이 된다. 

 

2. 파이썬 3 설치

   1) 설치파일을 실행시킨뒤 [Customize installation] 클릭

   2) Optional Features : 모두 체크 후 [Next] 클릭

   3) Advanced Options : Customize install location 부분에 경로를 C:\Python3으로 변경 

      * 원하는 경로로 설정 가능

   4) [Install] 클릭하고 설치

 

3. 환경변수 설정

   시스템 변수 > Path > 새로만들기 > 다음 경로(4개) 추가

   C:\Python3

   C:\Python3\Scripts

   C:\Python27

   C:\Python27\Scripts

 

4. python.exe 파일명 변경

   python3와 python27 폴더에 위치한 python.exe 파일명이 같으므로 둘 중 하나를 변경시켜 준다

   * 둘다 변경해도 무방하지만 나는 주로 python3를 사용하므로 python27만 python2.exe로 변경함

 

5. 확인

명령줄에 python 입력 시 python3이 실행되며 python2 입력 시 python2.7이 실행됨!

 

** python2.7 경로에 모듈을 추가하고 싶은 경우 다음 명령어 입력!

> python2 -m pip install [모듈명] 

APKTOOL을 이용해 디컴파일이나 재컴파일 시 프레임워크 관련 에러가 뜨는 경우가 있다.

id:2를 가진 패키지의 프레임워크 리소스를 찾을 수 없단다... 뭘까???

더보기

Can't find framework resources for package of id:2. You must install proper framework files, see project website for more info.

 ID 넘버는 애플리케이션의 pkgid와 상응하며 1~30까지 사용 가능함. 어떤 제조사의 기기를 사용하느냐에 따라 id 값이 상이함.


1. Framework파일이란?

Android 앱은 Android OS에서 제공하는 코드와 리소스를 활용하는데 이를 Framework (resources)라고 한다. 

Apktool을 이용해서 Android 앱을 디컴파일하거나 재컴파일할때 이런 framework 파일을 사용하는데 일반적인 앱의 경우 AOSP(Android Open Source Project) 프레임워크를 사용하며 다음 경로에 1.apk로 저장된다.

1.apk는 따로 다운받을 필요없으며, apktool 사용 시 자동으로 다운로드 된다. 

[사용자 경로]\AppData\Local\apktool\framework\1.apk

* 단, 오래된 apktool을 사용하거나 apktool을 사용한지 오래된 경우 다음 명령어를 사용하거나 해당 위치에 접근하여 직접 파일을 지워주고 실행하면 된다.

apktool empty-framework-dir

 

하지만 삼성, LG 등의 폰에 처음부터 빌트인되어 있는 앱(메모, 카메라, 인터넷 등)들을 디컴파일하거나 재컴파일할 때 처음에 언급한것과 같은 에러가 뜬다. 2.apk는 어디서 구하는 것일까??

 

2. Framework 파일 가져오기

대부분 기기의 /system/framework 폴더에 프레임워크 파일이 위치하며, 보통 resources.apk, res.apk, framework.apk 등의 이름으로 저장되어 있다. 

해당 위치에 원하는 파일이 없는 경우, /data/system-framework, /system/app, /system/priv-app 등의 경로에 숨어있는 경우도 있으니 확인하면 된다.

 

내가 테스트한 LG 핸드폰의 경우 /system/framework/lge-res/lge-res.apk이름으로 저장되어 있었다. 

adb pull 명령어를 사용해 해당 apk를 로컬 컴퓨터로 가져와 다음 경로에 위치시키면 된다. 

adb pull /system/framework/lge-res/lge-res.apk [사용자 경로]\AppData\Local\apktool\framework\2.apk

//apk 파일명의 경우 에러에서 표기된 id와 동일하게 저장하면 된다. 

 

3. APKTOOL 사용

올바른 위치에 2.apk가 저장된 것을 확인한 후 다시 apktool을 사용하면 문제없이 디컴파일하거나 재컴파일 할 수 있을것이다!!

 

https://ibotpeaches.github.io/Apktool/documentation/

 

Apktool - Documentation

Introduction Basic First lets take a lesson into apk files. Apks are nothing more than a zip file containing resources and assembled java code. If you were to simply unzip an apk like so, you would be left with files such as classes.dex and resources.arsc.

ibotpeaches.github.io

 

#1. 드로저(drozer) 설치

https://labs.f-secure.com/tools/drozer/

  • drozer (Agent .apk only) - 안드로이드폰에 설치
  • drozer (msi) - 윈도우 설치 파일
  • Python2 버전 사용 

#2. 드로저 실행

1) 모바일: drozer agent 앱 실행 후 우측 하단의 [ON] 버튼 클릭

    -> 디폴트로 31415 포트를 사용

2) PC: ADB로 단말기와 PC의 포트를 동일하게 설정

 ※ 다음 명령어 실행 전 adb와 모바일이 정상적으로 연결되는지 확인한다. 

adb forward tcp:31415 tcp:31415

정상적으로 포트포워딩이 되었는지 확인하면 31415 포트가 LISTENING 상태인 것을 확인할 수 있다.

netstat -an | findstr 31415 

 

3) PC: 드로저가 설치된 폴더로 이동 후 드로저 실행

drozer.bat console connect

위 명령어 실행 시 다음과 같은 에러가 나는 경우 pip install 명령어를 통해 필요한 모듈을 설치한다.

더보기

C:\Users\Administrator>drozer.bat console connect
Traceback (most recent call last):
  File "C:\Python27\Scripts\drozer", line 30, in 
    __import__("drozer.cli.%s" % (sys.argv[1]))
  File "C:\Python27\lib\site-packages\drozer\cli\console.py", line 8, in 
    from drozer.console import Console
  File "C:\Python27\lib\site-packages\drozer\console\__init__.py", line 4, in 
    from drozer.console.console import Console
  File "C:\Python27\lib\site-packages\drozer\console\console.py", line 5, in 
    from pydiesel.api.protobuf_pb2 import Message
  File "C:\Python27\lib\site-packages\pydiesel\api\__init__.py", line 9, in 
    from pydiesel.api.frame import Frame
  File "C:\Python27\lib\site-packages\pydiesel\api\frame.py", line 3, in 
    from pydiesel.api.protobuf_pb2 import Message
  File "C:\Python27\lib\site-packages\pydiesel\api\protobuf_pb2.py", line 3, in 
    from google.protobuf import descriptor
ImportError: No module named google.protobuf

pip install protobuf
pip install pyopenssl  // ERROR: drozer 2.4.4 requires pyopenssl>=16.2, which is not installed.
pip install pyyaml  // ERROR: drozer 2.4.4 requires pyyaml>=3.11, which is not installed.

pip install twisted
// drozer Server requires Twisted to run. Run 'pip install twisted' to fetch this dependency.

#3. 드로저를 이용한 취약점 분석

1) 앱 취약점 분석

run app.package.attacksurface -h // 옵션 설명
run app.package.attacksurface [패키지명] //패키지 취약점 확인

-> exported 설정된 것이 있는지, 디버깅 설정이 되어 있는지 등을 보여줌

 

2) 액티비티 분석

run app.activity.info -a [패키지명]

-> exported 설정된 액티비티의 권한 확인

 

run app.activity.start --component [패키지명] [액티비티명]

-> ADB로 am start -n [패키지명/액티비티명] 하는 것과 동일

-> 액티비티 무단 접근

 

3) 브로드캐스트 리시버 분석

 

run app.broadcast.info -a [패키지명]

run app.broadcast.info -f [검색하고자 하는 단어] //검색하고자 하는 단어가 포함된 패키지의 브로드캐스트 리비저 정보 검색

run app.broadcast.info -u [-a/-f] [패키지명/검색하고자하는 단어]  //숨겨진 리시버 정보 확인

 

 

웹에서는 아직 그런 경우를 못봤는데 간혹 모바일 진단 중에 버프를 이용해 패킷을 주고받는 속도가 너~~~~~무 느려서 진단하는데 영향을 미치는 경우가 있다. 

 

무슨 이유 때문인지는 아직 파악하지 못했지만... 이 경우, 피들러(Fiddler)를 사용하면 훨씬 빨라진다! 

 

하지만 피들러 사용에 익숙하지 않고 버프에 있는 기능을 꼭 사용하고 싶다면 다음의 방법을 사용해보자!

 

1. 우선, 컴퓨터에 피들러를 다운받아 설치한다. 

https://www.telerik.com/download/fiddler 

 

2. Fiddler를 켜고 [Tools - Options...]를 클릭한다. 

 

3. 가장 먼저 Fiddler 인증서를 컴퓨터와 모바일에 설치한다. 

 

1) [HTTPS] 탭에 들어가 [Capture HTTPS CONNECTs]와 [Decrypt HTTPS traffic]을 허용한다. 

    -> HTTPS 통신을 캡쳐할 수 있도록 허용하는 옵션이다.         

2)  [Actions - Trust Root Certificate]를 눌러 컴퓨터에서  Fiddler 인증서를 신뢰하도록 설정한다. 

     ** SCARY TEXT AHEAD: Read Carefully! 라는 경고창이 나오면 [Yes]를 누르고 신뢰설정하면 된다. 

         

 

3) 다음은 모바일에서 Fiddler 인증서를 다운받아 신뢰설정하는 과정이다. 우선 Fiddler에 설정된 listening 포트를 확인하고(8888 default), 컴퓨터의 IP를 확인한다.  

 

4) 모바일에서 프록시 설정을 진행한다.       

5) 인터넷 브라우저를 이용해 "http://IP:8888"에 접속하여 Fiddler 인증서를 다운받은 후 설치한다. 

 

4. 컴퓨터와 모바일에 인증서 신뢰설정을 마쳤다면 [Allow remote computers to connect] 옵션을 선택한다. 

    ** 버프에서 Proxy Listeners 설정 시 All Interfaces 옵션과 동일한 옵션이다. 

 

5. 이제 burp를 켜서 다음과 같이 [Proxy - Options - Proxy Listeners] 설정을 진행한다.

 

6.  Fiddler에 [Gateway - Manual Proxy Configuration]을 설정한다. Fiddler로 캡쳐한 패킷을 버프로 다시 Forward 시키는 설정이다. 

 

7. 마지막으로 Fiddler를 재시작하면 모든 설정이 Fiddler에 저장된다. 재시작하는 과정을 생략할 경우, 설정이 적용되지 않아 제대로 동작하지 않을 수도 있으니 꼭 재시작하자!!

 

<참고> 

혹시나 모든 설정을 마쳤는데 Fiddler에는 패킷이 잡히고, Burp에는 패킷이 잡히지 않는다면, [Options - Gateway - Manual Proxy Configuration] 설정을 [No Proxy]로 바꾼 뒤 저장하고,

다시 [Options] 창을 열어 [Manual Proxy Configuration] 설정을 하면 잘 잡힐 것이다 🙂 

 

 

 

 


이런 글을 보고 찾아본 결과 RLTM을 이용한 방법으로, 예전부터 조금씩 언급됐던 취약점인 것 같다.
저글만 보면 무슨 말인지 잘 이해가 가지 않으므로 차근차근 살펴보자. 


RLTM(Right to Left Mark)란?

RLTM은 아랍어처럼 문자열을 오른쪽에서 왼쪽으로 읽는 언어를 지원하기 위해 생겨난 문자이다.
즉, 일반적인 언어는 왼쪽에서 오른쪽으로 글자를 읽지만 아랍어는 반대로 읽기 때문에 어순 변경을 알리는 문자열인 셈이다.

자세한 설명은 다음 링크에 나와있으니 참고하면 좋다.


RLTM을 이용한 취약점

RLTM 취약점을 이용하면 확장자를 속여서 exe 파일을 실행시킬 수 있다.
즉, 화면상에는 다음 스크린샷처럼 txt 확장자로 보이지만 실제로는 exe 실행파일인 것이다.
그렇다면 똑같게 보이는 두 파일이 어떻게 다른 속성을 가진 파일이 되는 것일까??


두번째 "테스트exe.txt" 파일을 만드는 방법을 살펴보자. 

1) RLTM 문자를 복사한다. 



2) "파일명(테스트)" 뒤에 복사한 RTLM 문자를 삽입한뒤, txt.exe를 치려고 하면 아래 스크린샷처럼 문자가 오른쪽에서 왼쪽으로 타이핑된다. 


3) 완성하면 다음과 같이 우리눈에는 txt(텍스트) 파일로 보이지만 실제로는 exe 파일인 파일이 하나 만들어진다.

실행시켜보려하면 당연히 실행파일이 아닌 텍스트 파일로 테스트했기 때문에 실행이 불가능하다..! 


그럼 다시 동일한 방법으로 계산기 프로그램을 실행시켜보자.

1) C:\Windows\System32 에 위치한 calc.exe(계산기 프로그램)을 복사해서 다른 경로로 이동한다. 
※ 추후에 계산기를 실행시키지 못할수도 있으므로 꼭 복사해서 사용하자. 

2) 위에서 설명한 방법과 똑같이 확장자를 변경한다. 

3) 실행 가능한것 확인!! 


똑같은 방법으로 웹쉘 업로드 시 확장자 우회가 가능한 경우도 있다고 하니 참고하자!!



SSL 통신 프록시 연결 오류

최근 IOS 10 이상 버전에서 BURP 인증서 등록 후, SSL 통신을 잡는데 에러가 일어나서 무슨 새로운 솔루션이 생겨난줄 알았다...
그런데 그런게 아니었나 보다...!!

일단 지금 상태는 다음과 같이 계속 SSL 연결 오류가 난다. 보통 이런 현상은 인증서가 제대로 등록이 안됐을때 일어나는 현상인데 말이다...?!
※ 네이버 앱은 본 오류와 아무 관련이 없음을 알려드립니다. 


이런 현상이 일어나면 앱이 실행이 안되고 계속 멈춰있거나 네트워크 에러로 인해 종료된다. 
그러면 이제 앱 통신은 버프로 패킷을 잡을 수가 없는건가 생각햇다ㅠㅠ

SSL 통신 프록시 연결 오류 해결 방법

위의 링크를 보면 나와 비슷한 오류를 접하는 사람이 있었나보다. 

정말 간단하게 해결이 가능하다.

1) 설정 > 일반 > 정보 > 인증서 신뢰 설정 > "PortSwigger CA"를 루트인증서 전체 신뢰 활성화

 

 

2) 이제 다시 앱을 실행시켜 보면!! SSL 통신하는 패킷 잡힘!!

 


정확한 이유는 모르겠지만 IOS10 이상부터 이전과 동일한 방법으로 인증서 등록 시 루트 인증서로 설치가 되지 않고 사용자 인증서로 설치가 되서 신뢰할 수 있는 인증서로 인식을 하지 않아 SSL Connection 오류가 났던 것 같다. 


아이폰 애플리케이션 무결성 체크(기본)

기본적으로 IOS 애플리케이션에서 무결성 체크를 하는 로직이 있는지 여부를 확인하기 위한 아주 간단한 방법중 하나이다.
무결성 체크 로직이 있는 경우에는 해당 로직을 분석하여 우회하도록 변경하면 된다(탈옥탐지 우회랑 비슷한 방법으로 가능)

0) 사용되는 프로그램
  • HashCalc - 파일의 해시값을 구할 수 있는 프로그램이면 가능
  • HxD
  • iFunbox

1) iFunbox로 실행파일을 추출

2) 변조 전 실행 파일의 해시값 확인


3) HxD 로 파일 변조


3) 변조 후 실행파일의 해시값 확인


4) 변조한 파일을 저장 후, 해당 애플리케이션이 설치된 위치에 덮어쓰기

5) 앱 재실행 시 실행 가능 확인


+ Recent posts