GitHub News

GitHub CodeQL을 활용한 Solorigate 추적

GitHubKorea 2021. 4. 15. 10:54

 

지난달 CodeQL 보안 커뮤니티의 한 멤버가 전 세계 중요 네트워크 인프라의 다양한 부분에 가해진 SolarWinds 사건(Solorigate공격)에 영향을 받았는지 등의 여부를 평가하는 데 도움이 되는 C # 코드베이스의 여러 CodeQL 쿼리를 제공했습니다.  

SolarWinds공격 뿐만 아니라 다른 악성코드에 의한 공격을 방지하기 위해서는 빌드 인프라가 맬웨어에 감염되었는지 여부를 주기적으로 확인하는 것이 매우 중요합니다.

그래서 오늘!

여러분께 GitHub CodeQL을 이용해 빌드 인프라가 맬웨어에 감염되었는지 확인하는 방법을 소개하고자 합니다.
자세한 내용은 아래에서 확인해 보세요
>>


 

SolarWinds 사건이란, 2020년 12월 초 미국 국방부와 국토안보부 및 IT 거인인 Microsoft까지 해킹당한 사건을 가리킵니다. 공격을 주도한 해커들은 미국 정부를 포함해 다양한 조직에 네트워크 모니터링 도구를 제공하는 SolarWinds의 Orion 네트워크 모니터링 제품을 백도어링 한 다음 Orion 제품이 배포된 네트워크에 대한 액세스 권한을 탈취했습니다.

 

이러한 공격을 ‘Solorigate 공격’이라고 하는데 이미 SolarWinds의 제품을 사용하는 미국 정부와 Microsoft가 피해를 봤고 이외의 다른 기관 및 업체에서도 계속적으로 공격의 흔적이 발견되고 있습니다.  이에 Microsoft에서는 이번 공격을 대응하기 위한 주요 요소로 CodeQL*을 사용하여 취약성과 데이터 침해를 조사하고 있습니다.

 

*CodeQL: 쿼리를 사용하여 소스 코드를 분석하고 원치 않는 패턴을 찾는 의미 코드 분석(Semantic code analysis) 엔진

 

 



Solorigate 공격을 대응하기 위한 방법 중 하나는 바로 GitHub CodeQL을 사용한 취약성 및 데이터 침해를 분석하는 것입니다.  GitHub CodeQL을 사용하면 잠재적으로 위험한 위치 (예: SQL삽입공격의 취약점을 유발하는 SQL 문장 내부의 문자열 연결)로 끝나는 신뢰할 수 없는 소스 (예: HTTP 요청)의 데이터를 끝까지 추적하고 분석할 수 있습니다. 그럼 아래에서 CodeQL이 Solorigate 공격을 추적하는 과정을 알아보겠습니다.

CodeQL의 Solorigate공격 추적 과정

1. 빌드 서버가 Solorigate 악성 코드 캠페인의 빌드 하이재킹 구성 요소로 백도어됩니다.

2. Solorigate 악성 코드가 컴파일될 때 추가 소스 코드를 삽입합니다.

3. CodeQL이 감염된 서버의 빌드 프로세스를 관찰하면서 삽입된 악성 소스 코드를 정품 소스 코드와 함께 추출합니다.

4. CodeQL 데이터베이스에 악성 Solorigate 소스 코드의 흔적이 포함됩니다.

*CodeQL 데이터베이스가 감염되지 않은 시스템 장비에서 생성된 경우 데이터베이스에는 삽입된 소스코드가 포함되지 않습니다.

 

5. Microsoft 팀에서 제공한 CodeQL 쿼리들이 멀웨어에 의해 삽입된 악성 C # 코드의 패턴을 감지합니다.

 

이러한 쿼리를 실행하는 가장 좋은 방법은 잠재적으로 영향을 받을 수 있는 서버에 CodeQL 데이터베이스를 수동으로 생성하고 아래와 같이 Visual Studio Code용 CodeQL 확장판 및 GitHub Code Scanning을 이용해 해당 데이터베이스를 분석하는 것입니다.

CodeQL쿼리 실행 방법

◆ Visual Studio Code를 이용한 CodeQL쿼리 실행

1.CodeQL용 VS Code플러그인을 설치한 뒤, starter workspace를 세팅하기 위해 빠른 시작 가이드를 참조하여 진행합니다.

2. 잠재적으로 감염된 가능성이 있는 빌드 서버에서 C# 소스코드를 빌드하여 CodeQL데이터베이스를 생성합니다.

3.CodeQL 데이터베이스를 컴퓨터로 전송합니다.

 

*참고:
CodeQL 데이터베이스 자체에는 (잠재적으로 위험한컴파일 아티팩트 또는 감염된 실행 파일이 포함되어 있지 않습니다여기에는 (1)-컴파일된 소스코드의 일반 텍스트 사본, (2)-해당 코드의 관계 표현이 포함되어 있습니다.

 

4. 잠재적으로 감염될 수 있는 CodeQL데이터베이스를 VS Code로 불러들입니다.

5.solorigate.qls CodeQL쿼리 모음 파일을 찾을 수 있는 ql/csharp/ql/src/codeql-suites로 이동하신 뒤, 오른쪽 클릭하신 후, [CodeQL: Run Queries in Selected Files]를 클릭합니다.

 

2 번에서 5번 항목을 감염될 가능성이 높은 모든 코드베이스에 반복해주시기 바랍니다.

 

◆ GitHub Code Scanning을 이용한 CodeQL쿼리 실행

1. 분석하고자 하는 저장소에서 .github/codeql/solorigate.qls 파일을 생성합니다.

 

 

2. CodeQL 워크플로우를 기본값으로 설정합니다.
(혹은 현재 가지고 계신 워크플로우를 수정하신 뒤, 아래와 같이 템플릿의 “Initialize CodeQL” 섹션을 수정합니다.)

*코드를 컴파일하는 데 특수 빌드 명령이 필요한 경우, CodeQL 코드스캔 분석 사용자 지정에 대한 설명서를 참조하십시오.

 

3. 아래의 구성을 사용하면 추가 CodeQL 쿼리들이 실행됩니다.

 

4. CodeQL이 소스 코드에서 맬웨어 항목(Solorigate 또는 기타 위협)을 감지하면 GitHub 코드 스캔 웹 인터페이스에서 경고를 생성합니다.




자세한 내용 및 구성 예제는 GitHub 코드 스캔에서 사용자 지정 CodeQL 쿼리 실행에 대한 설명서를 참조하세요.

 

 

CodeQL이 제품 또는 코드베이스에서 의심스러운 요소를 표시한 다음에는 영향을 받는 영역에 대해 신중한 코드리뷰를 수동으로 수행해야 합니다. 특히 CodeQL에서 본 코드를 원본 소스 코드와 비교하는 방법으로 진행하는 것을 권장 드립니다.

Microsoft의 Solorigate대응 팀이 제공한 쿼리들은 Solorigate 공격에 관련된 것과 같은 백도어를 탐지하기 위한 휴리스틱 역할을 합니다. 부정적인 결과가 꼭 시스템이나 네트워크가 손상 및 침투되었음을 의미하는 것은 아니고 CodeQL을 사용하여 코드베이스를 분석하는 것은 손상을 감시하는 기술 모자이크의 한 부분에 불과한 점 참고해 주세요.


 

여기까지 GitHub의 CodeQL을 이용해 Solorigate공격에 대응하는 방법에 대한 소개였습니다.
공격에 대한 자세한 내용과 다른 감사 기술에 대한 조언은 Microsoft Solorigate 리소스 센터Microsoft 블로그 게시물을 참조하세요.

 

혹시 CodeQL 및 Solorigate와 관련해 궁금한 사항이 있으신 분들은 아래 댓글을 남겨주시거나 이 양식을 통해 문의해 주세요. 언제든지 신속하게 도와드리도록 하겠습니다~

 

즐겁고 활기찬 한 주 보내세요

감사합니다.

 

이 게시글은 GitHub의 Using GitHub code scanning and CodeQL to detect traces

of Solorigate and other backdoors를 번역한 글입니다.