오랜만에... BurpLoader.jar 분석 3번째 이야기를 할까 합니다.

Analysis BurpLoader.jar Part 1

http://www.hahwul.com/2017/06/hacking-analyzing-burploaderjar-in-burp.html

Analysis BurpLoader.jar Part 2

http://www.hahwul.com/2017/06/hacking-analyzing-burploaderjar-in-burp_20.html

Analysis BurpLoader.jar Part 3

http://www.hahwul.com/2017/12/hacking-analyzing-burploaderjar-in-burp.html

BurpLoader가 가끔 주기적으로 실행이 안되는 문제가 있었습니다. 매번 새로운 Larry 버전을 구하러 다니는데.. 이유를 찾다보니 이 프로그램에 대해 조금 더 다가갈 수 있었네요.

이 화면에서 넘어갈 수가 없죠.

이전 BurpLoader.jar 분석

이전에는 악성 여부에 대한 분석이 중점이였습니다. 다만 이번엔, 가끔씩 발생하는 License 관련 오류의 원인이 무엇일까? 라는 고민에서 출발했습니다.

매번 구 버전의 Burploader는 어느정도 시간이 지나면 저런 현상이 발생했었죠. 처음엔 원격지 서버와 통신해서 처리하나? 생각을 했었는데, 지난번 분석에서도 같이 네트워크 트래픽이 특별하게 튀진 않았습니다.

그래서 의심을 하게된 부분이 바로..

"인증서 or 시간제한"


인증서의 경우 유효기간, 시간제한은 당연히 사용할 수 있는 시간에 제약받기 때문에 2개 모두 시간과 관련된 사항입니다. 일단 여러 버전에 대해서 비교를 해봤습니다.

v1.7.11 vs v1.7.17


일단 2가지 버전의 BurpLoader.jar를 구해서 차이를 비교해봤습니다.

#> pkgdiff BurpLoader.jar BurpLoader_17.jar 
reading packages ...
comparing packages ...
creating changes report ...
result: CHANGED (0.1%)
see detailed report:
  pkgdiff_reports/BurpLoader/X_to_17/changes_report.html


애게? 0.1%?? 이건 뭐.. 거의 주석에 있는 버전 변경 수준인데요. 직접 코드를 확인해보니 특정 값과 버전 정보가 바뀌었습니다.

바뀐 파일은 META_INF의 MANIFEST.MF 파일입니다. 압축 풀고 봐봅시다.

#> jar xvf BurpLoader.jar 




매니페스트에선 앱의 기본적인 정보를 저장합니다. 이건 안드로이드와 비슷하죠.(안드로이드 앱은 Java 기반이니)

혹시나 이미지에 뭐가 있을까? 해서 봤지만.. 별거 없습니다. 깊숙히 숨겼다면 코드 분석 아니면 식별이 안되겠지만, 일단 exif엔 없네요.

아무것도 없다고 한다.


Code Analysis 

보다보니 추가로 알게된 내용이 더 있었습니다. 원격지로 요청이 발생할 수 있는 코드는 BurpLoader에 내장되어 있고, 이는 실행과정에서 무조건 거쳐갑니다.
(물론 트리거 안되는 경우가 다수 같아요)

security/CodeSource 구간

흐름상으론 무조건 확정


추가로 지난번 ldc 말고도 md5 하나가 더 있었네요.

새로운 md5 패턴 데이터 발견

How to Fix?

다시 본론으로 와서 1.7.11 과 1.7.17의 차이가 아주 미미한 데이터 정도 차이이고, 인증서일 경우 유효기간으로 인해 Fake 인증이 실패한 것 같습니다.

그래서.. PC 시간을 바꿨죠.

결국은 시간 문제!

헛.. 잘 되네요


이제 머리만 잘 굴리면 쉽게 기간에 구애받지 않는 프로그램을 만들 수 있습니다.
시간을 바꾸고 실행 후 다시 시간 원상 복귀를 한다면 인증서 기간에 영향받지 않고 가능하죠.

라고 생각했으나 실제로 실행해보니 중간중간 인증서에 대한 체크로 인해 프로그램이 종료합니다. (원래 날짜로 돌렸으니)

아주 간단한 트릭으론 ... 불가능한듯.

결국 인증서 검증 로직은.. BurpLoader의 부분이 아닌 Pro 버전의 부분으로 판단됩니다.
그럼 어떻게 해야할까?

생각해보니 몇가지 방법이 떠오르더군요.

1. 가상환경에서 BurpLoader를 동작(oioi님 아이디어)
2. Docker로 환경 구축
3. 자바 코드로 강제로 시간 데이터를 변조

1,2 번의 경우 간단합니다. 각각의 환경에서 변조된 시각으로 BurpLoader를 실행해주면 됩니다. 3번의 경우도 faketime 같은 라이브러리를 쓰면 가능하죠.

(3번은 이미 관련 프로젝트도 있고, 결과도 굉장히 좋습니다. 궁금하시면 따로 문의주세요)

Conclusion

알면 알아갈수록 복잡하네요. 어떤 방법으로 인증을 풀었는지가 관건인데, 깨작깨작 분석하는 것으로는 오래걸릴 것 같습니다. 그리고 이런건.. 뭔가 악성코드 분석하시는 분들이 훨씬 잘 보실 것 같아요.

관심 있으시면 분석해보고 이야기 나눌 수 있으면 정말 좋을 것 같네요 :)







댓글 3개:

  1. 작성자가 댓글을 삭제했습니다.

    답글삭제
  2. Awesome! I am waiting for next part.

    답글삭제
    답글
    1. Thank you endryu.
      Plz write down any comment if you have a good idea in this post, analysis burploader!

      삭제