보안 사고 탐지
GitLab v19.5Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
요약
잠재적인 보안 사고를 일찍 탐지할수록 영향을 더 많이 제한할 수 있습니다. GitLab Security Operations 팀은 GitLab Self-Managed 인스턴스의 관리자와 Maintainer, 그리고 GitLab.com 그룹의 관리자와 Maintainer를 위해 이 권장 사항을 작성했습니다.
잠재적인 보안 사고를 일찍 탐지할수록 영향을 더 많이 제한할 수 있습니다.
GitLab Security Operations 팀은 GitLab Self-Managed 인스턴스의 관리자와 Maintainer, 그리고 GitLab.com 그룹의 관리자와 Maintainer를 위해 이 권장 사항을 작성했습니다. GitLab에서 보안과 관련된 활동에 대한 탐지 범위를 구축하고, 잠재적인 보안 사고를 나타내는 신호를 파악하는 데 활용합니다. 이 권장 사항은 조직이 정의한 탐지 및 모니터링 프로세스를 보완하지만 대체하지는 않습니다.
사고를 확인하면 보안 사고 대응에 따라 사고를 차단하고 해결합니다.
이 제안과 권장 사항은 사용자 책임하에 사용합니다. 탐지 범위는 사용자의 구성, 구독 티어, 환경의 로깅 및 모니터링 도구에 따라 달라집니다.
탐지 체계 구축#
효과적인 탐지는 신뢰할 수 있는 데이터 소스, 이를 분석하는 중앙 위치, 원시 활동을 조치 가능한 알림으로 바꾸는 조정된 규칙을 결합합니다.
탐지 데이터 소스#
GitLab은 의심스러운 활동을 탐지하는 데 사용할 수 있는, 보안과 관련된 여러 데이터 소스를 생성합니다.
| 데이터 소스 | 제공 여부 | 확인할 수 있는 내용 |
|---|---|---|
| 감사 이벤트 | Premium, Ultimate | 인증, 권한 변경, 프로젝트·그룹·설정의 변경. GitLab에서 보안 사고를 탐지하는 주된 소스입니다. 전체 목록은 감사 이벤트 유형을 참고합니다. |
| 로그인 감사 이벤트 | 모든 티어 | 사용자 프로필의 Authentication log에 표시되는 사용자의 성공한 로그인. |
| 시스템 로그 | 모든 티어, GitLab Self-Managed 전용 | 애플리케이션, API, 인증, Workhorse 로그. 상관관계 ID를 사용하면 여러 로그에 걸친 단일 요청을 추적할 수 있습니다. |
| CI/CD job 로그 | 모든 티어 | 노출된 시크릿, 예기치 않은 명령, 공격자가 시작한 파이프라인 활동. |
| 자격 증명 인벤토리 | Ultimate | 인스턴스나 최상위 그룹에 있는 개인, 그룹, 프로젝트 액세스 토큰, SSH 키, GPG 키. |
| 시크릿 푸시 보호와 시크릿 탐지 | 시크릿 푸시 보호: Ultimate. 파이프라인 시크릿 탐지: 모든 티어. | 사용자가 푸시하려고 시도했거나 리포지터리에 커밋된 시크릿. |
각 소스에 담긴 내용과 각 제공 형태 및 구독 티어에서 수집하는 방법은 보안 텔레메트리를 참고합니다.
예상치 못한 위치에서의 로그인이나 2단계 인증 변경 같은 의심스러운 인증을 탐지하려면 시스템 액세스 감사 이벤트를 검토합니다.
이벤트를 중앙화하고 SIEM으로 스트리밍#
사고를 거의 실시간으로 탐지하고 조사를 위해 이벤트를 보관하려면 보안 정보 및 이벤트 관리(SIEM) 시스템이나 다른 로그 분석 플랫폼에 데이터를 중앙화합니다.
- 감사 이벤트를 외부 대상으로 스트리밍합니다.
- GitLab Self-Managed 및 GitLab Dedicated: 인스턴스용 감사 이벤트 스트리밍
- GitLab.com: 최상위 그룹용 감사 이벤트 스트리밍
- 이벤트를 스트리밍하지 않는다면 감사 이벤트 API로 일정에 따라 수집할 수 있습니다.
- 공격자가 로그와 이벤트를 변경하거나 삭제할 수 없도록 독립적인 쓰기 한 번(write-once, 변경 불가) 데이터 저장소로 라우팅합니다.
- 데이터가 필요해지기 전에 조사 및 규정 준수 요구 사항을 충족하는 보존 기간을 정의합니다.
GitLab 탐지 규칙 사용#
GitLab Security Operations 팀은 GitLab 환경을 위한 오픈 소스 탐지 프레임워크인 TLDR(Threat, Logs, Detection, Respond)을 유지 관리합니다.
각 TLDR 탐지에는 다양한 정보가 포함됩니다.
- Threat 세부 정보: 위협에 대한 설명과 기술적·비즈니스적 영향.
- Logs: 탐지에 필요한 로그 소스와 샘플 이벤트.
- Detection: 일반적인 Sigma 형식의 규칙과, SIEM이 없는 환경을 위한 원시 로그 쿼리.
- Atomic test: 탐지가 동작하는지 확인할 수 있도록 활동을 재현하는 단계.
- Response: 진양성(true positive)을 처리하는 방법에 대한 안내.
탐지는 두 가지 유형으로 나뉩니다.
-
위협 탐지: 2단계 인증 비활성화, 새 관리자 계정, 새 배포 키 또는 프로젝트 액세스 토큰, 머지 리퀘스트 승인 또는 보호된 브랜치 설정 변경처럼 감사 이벤트에 기록되는 의심스럽거나 악의적인 활동.
-
취약점 탐지: 애플리케이션 로그에 기록되는, GitLab Self-Managed의 알려진 취약점을 악용하려는 시도.
이 탐지를 사용하려면 다음과 같이 합니다.
- 각 탐지에 나열된 로그 소스를 SIEM으로 수집합니다.
- Sigma 규칙을 SIEM의 쿼리 언어로 변환합니다. 공식 Sigma CLI나 웹 기반 sigconverter.io를 사용합니다.
- 변환한 규칙을 먼저 모니터링 전용 모드로 배포하고 알림 발생량을 검토합니다.
- 대기 중인 대응 담당자에게 알림을 라우팅하기 전에 환경에 맞게 규칙을 조정합니다.
탐지 범위 매핑 및 탐지 조정#
탐지를 배포한 후에는 정확성을 유지하고 조직에 중요한 위협을 다루도록 정기적으로 검토합니다.
- 탐지를 MITRE ATT&CK 같은 프레임워크에 매핑하여 어떤 공격자 기법을 탐지할 수 있고 어디에 공백이 있는지 파악합니다.
- 환경의 정상 활동을 기준선으로 설정해 알림이 의미 있는 이탈에 집중하도록 합니다.
- 노이즈가 많은 규칙을 조정하여 심각도가 높은 알림의 신뢰성을 유지합니다.
- 각 탐지가 예상대로 동작하는지 테스트하고 각 규칙의 예상 동작을 문서화합니다. 각 TLDR 탐지에는 이를 위해 사용할 수 있는 atomic test가 포함되어 있습니다.
시나리오별 탐지 대상#
다음 시나리오 대부분은 사고 대응의 일반적인 보안 사고 시나리오와 일치합니다. 각 시나리오에서 나열된 신호를 모니터링합니다. 탐지가 발생해 사고를 확인하면 연결된 대응 단계를 따릅니다.
다음 표는 각 시나리오를 MITRE ATT&CK 기법 예시에 매핑합니다. 이 매핑은 출발점으로 사용하고 조직의 위협 모델에 맞게 조정합니다.
| 시나리오 | 주요 신호 | MITRE ATT&CK 기법 예시 |
|---|---|---|
| 자격 증명 노출 및 토큰 악용 | 새 토큰, 키, 사용자, CI/CD 변수 변경 | T1552 Unsecured Credentials, T1078 Valid Accounts, T1136 Create Account |
| 침해된 사용자 계정 | 비정상적인 로그인, 2단계 인증 변경, 새 OAuth 애플리케이션 | T1078 Valid Accounts, T1110 Brute Force, T1098 Account Manipulation, T1556 Modify Authentication Process |
| CI/CD 악용 | 파이프라인 구성, 변수, 러너 변경 | T1195.002 Compromise Software Supply Chain, T1552 Unsecured Credentials |
| 침해된 인스턴스 | 새 관리자, root 사용자 활동, 호스트 지표 | T1078 Valid Accounts, T1098 Account Manipulation, T1136 Create Account |
| 잘못 구성된 프로젝트 또는 그룹 설정 | 공개 범위, 승인, 보호된 브랜치 변경 | T1685 Disable or Modify Tools, T1485 Data Destruction |
| 데이터 유출 | 대량 클론, 프로젝트 내보내기, 새 배포 키 또는 토큰 | T1213.003 Code Repositories, T1567 Exfiltration Over Web Service |
| 악용 및 리소스 오용 | 컴퓨트 급증, 새 계정의 급증, 과도한 Git 작업 | T1496 Resource Hijacking, T1136 Create Account |
자격 증명 노출 및 토큰 악용#
토큰, 키 또는 다른 자격 증명이 노출되었거나 오용되었음을 시사하는 활동을 주시합니다.
- 개인, 프로젝트 또는 그룹 액세스 토큰의 생성. 특히 예상하지 못한 사용자가 만든 경우.
- SSH 또는 GPG 키의 생성.
- 공격자가 지속성을 유지하는 데 사용할 수 있는 새 사용자 계정의 생성.
- CI/CD 변수나 시크릿을 저장하는 다른 구성의 변경. 지속적 통합 감사 이벤트에 집중합니다.
- 예상하지 못한 사용자가 실행한 파이프라인. 자세한 내용은 job 로그를 검토합니다.
대응 방법은 공용 인터넷에 대한 자격 증명 노출을 참고합니다.
침해된 사용자 계정#
계정을 소유자가 아닌 다른 사람이 사용하고 있다는 신호를 주시합니다.
- 예상하지 못한 IP 주소, 위치, 기기에서의 로그인처럼 의심스러운 로그인 이벤트.
- 개인, 프로젝트 또는 그룹 액세스 토큰의 생성 또는 삭제.
- SSH 또는 GPG 키의 생성 또는 삭제.
- 2단계 인증 설정의 변경.
- 이메일 주소나 알림 설정의 변경.
- 승인된 OAuth 애플리케이션의 추가 또는 수정.
- 연결된 SAML ID 공급자의 변경.
대응 방법은 침해가 의심되는 사용자 계정을 참고합니다.
CI/CD 악용#
시크릿을 노출하거나 공격자가 파이프라인에서 코드를 실행할 수 있게 하는 변경을 주시합니다.
- CI/CD 구성 파일이나 파이프라인 정의의 수정.
- 마스킹과 보호 설정을 포함한 CI/CD 변수의 변경.
- 파이프라인이나 job 아티팩트를 공개적으로 접근할 수 있게 만드는 변경.
- 새 러너의 등록 또는 기존 러너의 변경.
- CI/CD job 토큰의 예기치 않은 사용.
대응 방법은 CI/CD 관련 보안 사고를 참고합니다.
침해된 인스턴스#
GitLab Self-Managed에서는 인스턴스 수준과 호스트 수준의 신호를 주시합니다.
- 시스템 설정, 사용자 권한 또는 로그인 이벤트의 변경을 보여 주는 시스템 액세스 감사 이벤트.
- 새 관리자 계정의 생성, 또는 관리자 root 사용자의 활동.
- 인식할 수 없는 백그라운드 프로세스, 예상하지 못한 열린 포트, 비정상적인 네트워크 트래픽 같은 호스트 수준 지표.
대응 방법은 침해가 의심되는 인스턴스를 참고합니다.
잘못 구성된 프로젝트 또는 그룹 설정#
데이터를 노출하거나 액세스 제어를 약화시킬 수 있는 변경을 주시합니다.
- 프로젝트 또는 그룹 공개 범위의 변경.
- 머지 리퀘스트 승인 설정의 수정.
- 프로젝트 삭제.
- 의심스러운 웹훅이나 서버 훅의 추가.
- 보호된 브랜치 설정의 변경.
target_type 필드로 감사 이벤트를 필터링해 검색 범위를 좁히고, 컴플라이언스 관리 및 그룹과 프로젝트 감사 이벤트를 검토합니다.
대응 방법은 잘못 구성된 프로젝트 또는 그룹 설정을 참고합니다.
데이터 유출#
소스 코드나 다른 데이터가 GitLab 밖으로 복사되고 있다는 징후를 주시합니다. 이는 침해된 계정이나 토큰으로 공격자가 접근 권한을 얻은 뒤에 발생하는 경우가 많습니다.
- 한 사용자나 토큰이 짧은 기간에 수행한 많은 리포지터리 다운로드 또는 클론.
- 프로젝트 또는 그룹 내보내기와 내보내기 파일 다운로드. 특히 평소 이를 수행하지 않는 사용자가 수행한 경우.
- 리포지터리에 대한 장기 액세스를 제공하는 새 배포 키 또는 배포 토큰.
- 예상하지 못한 사용자의 job 아티팩트 다운로드.
- 비공개 프로젝트나 그룹을 공개로 바꾸는 변경.
- 이전에 확인되지 않은 IP 주소에서 사용된 개인 액세스 토큰.
대응하려면 공용 인터넷에 대한 자격 증명 노출에 따라 관련 자격 증명을 폐기하고, 조직이 정의한 사고 대응 프로세스를 따릅니다.
악용 및 리소스 오용#
CI/CD에서의 암호화폐 채굴처럼 자동화된 악용과 예상치 못한 리소스 소비를 주시합니다.
- 파이프라인 활동, 컴퓨트 분(minutes), 새 러너 등록의 급증.
- 새 계정 생성의 급증.
- 과도한 Git 작업. Ultimate에서는 Git 악용 속도 제한을 구성하여 이러한 패턴 중 일부를 자동으로 완화할 수 있습니다.
대응하려면 조직이 정의한 사고 대응 프로세스를 따르고 보안 강화 권장 사항을 검토합니다.
탐지가 발생했을 때#
탐지가 알림을 발생시키면 이를 분류하여 보안 사고가 진행 중인지 확인합니다.
- 증거를 보존합니다. 이후 조사를 위해 관련 로그와 감사 이벤트를 쓰기 한 번 저장 위치에 저장합니다.
- 영향을 받은 사용자, 프로젝트, 그룹, 토큰, 호스트 같은 범위를 확인합니다.
- 일치하는 시나리오에서 연결된 대응 단계를 따라 사고를 차단하고 해결합니다.
- 조직이 정의한 사고 대응 프로세스를 따릅니다.
GitLab에 지원 요청#
GitLab에 도움을 요청하기 전에 GitLab 문서를 검색합니다. 예비 조사를 마친 뒤에도 질문이 있거나 지원이 필요하면 GitLab Support에 문의합니다. GitLab Support의 지원 대상 여부는 라이선스에 따라 결정됩니다.