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 패킷도 잘~ 잡힐 것이다~!!

 


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

+ Recent posts