SSL Pinning 우회 iOS

2019. 7. 21. 19:36 보안 이야기/리버스엔지니어링

최근까지 하고있는 모의해킹 프로젝트에서 가장 막강한(?) 대응책으로 불리웠던 SSL Pinning 우회방법에 대해 알아보자. 적나라하게..

 

웹에서 검색을 했을 때는 사실 뭐라고하는지 잘 모르겠어서 시도하기가 어려웠다. 요는 frida hooking을 이용하는 것이다.

 

사실 엄청나게 헤멨다. 굉장히 뎊스있는 모의해킹을 원하는 고객 덕에 많이 배우고 있는 요즘이다.

 

처음 시도했던 것은 바로 IDA를 이용한 바이너리 분석이다.

 

 

 

 

 

SSLpinning을 검색한 후 관련 클래스를 모두 분석을 했었다(결과는 당연 아무것도 모르겠다)

 

두번째, 루팅 체크 우회를 할 떄 처럼 FLEX를 이용해서 몇개의 관련 클래스의 리턴값을 마구 바꿔봤었다. 이를테면

 

 

위 처럼 검색을 한 후에 리턴값을 고정을 하는것인데.. 내가 IDA로 바이너리 분석을 잘했다면 여기서 성공했을 수도 있지만

나같은 짬찌(짬찌끄러기)의 영역이 아니였다 .. 

 

계속되는 실패에 느낀 것은 이 클래스에서만 가지고 우회를 할 수 있는 것이 아니구나라고 생각했다.

 

그래서 계속해서 업무가 조금 느슨해질 때마다 분석을 조금씩했는데  frida의 좋은 hook 소스를 몇개 찾았다

 

 

메소드의 리턴 밸류를 프린트해주는 후킹소스로 이걸로 AFSecurityPolicy 클래스의 모든 메소드의 리턴밸류를 후킹했다(개씹노가다)

 

뭐 대충 이런 모양으로 찍힌다.

 

 

뭐 덕분에 대충 흐름을 찾았다 그리고 또 시도한 것은 리턴밸류를 특정값으로 변경시켜주는 소스로 훅을 걸었다

 

이런 소스인데 한번에 여러개의 메소드의 훅을 걸 수는 없고 프로세스를 많이 열어서 많이 거는 수 밖에 없는 것같다(내가 못하는 걸수도 있고)

 

물론 이걸로도 다양한 시도를 했는데 결국 실패했다. 나같은 쩌렙이 한번에 성공하리라고는 기대도 안한다.

 

이유는 내가 생각한 원리가 아닐수도 있다고 생각을 헀다.

 

내가 생각한 원리는 메소드들이 인증서 확인을 거치고 참/거짓 리턴값을 뱉는 구조일 거라고 생각했다.

 

이렇게 포기를 해야하나 싶었는데 오늘 엄청나게 한가돋아서 다시 시도를 했다.

 

차분히 하나하나 수많은 git허브를 찾아서 찾은 소스를 봤는데

 

대충 내가 생각한 대로의 소스를 발견해서 다시 해봤다. 소스는 

 

 

 

 

대략 이런 느낌의 소스로 잘 보면 if문 안에 특정 클래스들에 훅을 걸고

마지막에 retval.replace(0x1) 등과 같이 쓰있는데

 

이것이 바로 내가 생각한 부분과 일치하는 부분이었다.

 

retval은 리턴밸류의 약자이고 replace는 뭐 js니까 치환

그래서 이 소스를 이용해서 훅을 걸었다.

 

 

 

이런식으로 로그가 찍히면서 진행이된다 그럼 프록시를 걸고 띄여보자(burp인증서 설치는 다른데도 많으니 생략)

 

이렇게 프록시를 확인했는데

 

 

 

잘 걸린다.. 뿌듯 ..

 

거의 두달정도 생각을했다..

 

물론 몰두하고 있던겉은 2~3일정도지만

 

어쨋거나 해결해서 너무 기뿌다..

 

이로서 공격할 수 있는 포인트가 더 많아졌다.

 

스킬업

 

아맞다 .. 딴데가서 이런걸로 나쁜짓하면 잡혀간답니당 ..