파이썬 오픈소스 라이브러리 변경사항 모니터링 시스템, 그 이후 두달간의 이야기

파이썬 오픈소스 라이브러리 변경사항 모니터링 시스템: 그 이후 두달의 이야기

파이썬 오픈소스 라이브러리 변경사항 모니터링 시스템을 운영한지 오늘로서 두달이 되었다.

생각보다 오픈 후에 여러 일들이 있어서 정리 해 보고자 한다.

운영

웹 서비스의 경우 오픈 후 스캔성 공격이 계속 들어와서 부하가 발생, 결국 외부 서비스를 닫아버렸다.

그래도 수집기와 분석기는 정상적으로 돌고 있으니 걱정하지 말자. (아무도 걱정 안한다)

바뀐 것

오픈 이후에 많은 부분을 바꿔서 나름의 고도화(유사) 작업을 진행했다.

소스코드 분석

처음에는 단순히 IP, Domain을 탐지하기 위한 방법으로 소스코드 전역 스캔을 정규표현식을 이용해 스캔했다.

근데 이걸 실제로 쓰는 IP인지 아니면 주석으로 써둔 것인지 구분하기 힘들었다.

이를 해결하기 위해 AST (Abstract Syntax Tree) 패키지를 이용해서 파이썬 코드를 정적 분석하고, 실제 할당된 변수의 값에 IP, Domain이 있는지에 대해 검사하도록 수정했다.

부분 동적 분석 도입

소스코드 분석에서 IP / Domain이 있는 경우 동적 분석 엔진에 보내 그 결과를 받을 수 있도록 했다.

특별한 정보는 아니고 그냥 네트워크 통신, 파일 IO, 프로세스 정보, 그리고 리소스 사용량 정보 정도이다.

처음에는 파이썬 라이브러리 전체를 스캔하고 모든 함수를 호출 해줘야 하나 고민했는데, 그냥 개발자가 작성한 테스트 코드를 구동하는 방식으로 구현했다.

완벽하게 모든 코드를 스캔할 순 없지만 (code coverage라는게 있기 때문에) 그래도 나름 구현하면서 재밌던 경험들이나, Docker 내부를 2020년 이후로 뜯어보면서 변경된 사항들을 찾아 볼 수 있었다.

그리고 네트워크 통신 정보를 수집하는 과정에서 이전에 개발한 Honey-V 프로젝트를 많이 참고 하였다.

단점: 개발자가 테스트 코드를 작성하지 않는 경우 검사가 안됨 ㅠㅠ, 그리고 공격 목적으로 작성된 라이브러리의 경우 (당연히) 테스트 코드가 없다. 그딴걸 개발할 시간에 공격을 하나 더 하는게 유효하기 때문에

Contributor 이메일 등록 도메인 정보 추가

파이썬 ctx 라이브러리와 같이 contributor / maintainer의 이메일에 등록된 도메인이 만료되어 공격자한테 탈취되는 일이 없도록 whois 정보를 추가했다.

이 정보를 이용해서 한달이 남지 않은 도메인에 대해 위험하다는 경고를 해 주고 싶었다. (사실 도메인의 경우 만료가 되도 바로 시장에 풀리는게 아니라 일정 기간을 두고 풀리기 때문에 실제로 이 공격이 먹힐 일은 없겠지만 그래도 사례가 있으니)

실제로 만료일이 얼마 안되는 author(한달 기준, 대부분 도메인 관리 업체에서 한달 전에는 notice를 주긴 하므로) 가 생각보다 많진 않았지만 무려 오늘 기준 하루 남은 패키지를 찾긴 했다.

물론 내일 이후에 이 도메인이 바로 탈취되진 않겠지만.. 그래도 이런건 보고 있긴 해야된다.

Typosquatting Attack Scoring 추가

최근 늘어난 공격 방법 중 하나인 Typosquatting 공격에 대해 탐지할 수 있는 자체 scoring 공식을 만들었다.

이 방법에 대해서는 아직 다 다듬어진 것은 아니여서 상세한 내용은 밝힐 수 없지만,

110개의 Typosquatting 공격 의심 라이브러리를 탐지, PyPI 측에서 실제로 5개의 라이브러리를 차단 조치했다. (중요: 내가 알려줘서 차단 한 것은 아니고.. 탐지 된 것 확인해서 퇴근하고 확인 해 보니 이미 차단 되었다 - 생각보다 조치가 매우 빠르다..)

생각보다 재밌는 방법으로 scoring을 했는데 이를 실제로 구현하면서 오랜만에 재밌었다. :)

유효한 데이터는 나왔는가?

수치 값으로 표현하면 다음과 같다.

  • 파이썬 리포지토리에 업데이트 된 내역 140,269건 스캔
  • 정적/동적 분석을 통해 수집된 악성 파일은 아직 없음
  • 7,508건의 유효한 Contributor E-mail domain 수집
  • 그 중 만료기한이 오늘 기준으로 무려 하루 남은 패키지 1개 발견 (프로젝트가 관리가 되고 있음에도)
  • 만료기일 수집 하다가 whois query 더 안되서 못하는 중
  • 110건의 Typosquatting 의심 업데이트 탐지, 5건만 실제로 차단 (정책 때문에 단순히 이름이 비슷하면 안되는듯)

앞으로 뭘 할껀가

  • Typosquatting 공격 탐지 방법에 대해 아이디어가 많은데, 그 아이디어 하나씩 구현해 볼 예정
  • 부분 동적 분석하는데 사용한 기술 일부 나중에 기회 되면 공개
  • 수집 / 탐지 엔진 성능 개선 (요즘 최적화 공부중이라 응용)

Conclusion

졸업합니다