코드를 수동으로 읽는 것은 시간이 많이 걸리는 프로세스입니다. 또한 중요한 세부 사항을 놓치기 쉽기 때문에 오류가 발생하기 쉽습니다. 개발자이자 침투 테스터로서 우리는 이 프로세스를 자동화하는 방법을 찾아야 합니다. SAST는 이 작업에 도움이 될 수 있는 기술입니다.
SAST는 만병통치약이 아닙니다. 오픈 소스 프로젝트 또는 화이트박스 침투 테스트를 위한 소스 코드에 액세스할 수 있는 사용 사례에만 사용할 수 있습니다. 그러나 이는 쉽게 매달린 과일을 찾고 시간을 절약하는 데 도움이 될 수 있습니다.
SAST(정적 애플리케이션 보안 테스트)는 코드의 보안과 신뢰성을 높이는 데 사용되는 정적 코드 분석의 하위 집합입니다. SAST는 오래된 종속성, 비밀 탐지, 취약점으로 이어지는 논리적 오류 등을 탐지합니다. SAST에는 시각적 코드 복잡성, 코드 모호성, 취약점으로 이어질 수 있는 비직관적 관행 등 사이버 보안에 이차적으로 영향을 미치는 테스트가 포함됩니다.
SAST 도구는 일반적으로 코드에서 알려진 취약점을 찾는 스테로이드의 정규식 패턴 일치자입니다. 예를 들어 SAST 도구는 Python 코드에서 eval
, exec
또는 pickle
사용을 찾을 수 있으며 이러한 함수는 임의 코드를 실행하는 데 사용될 수 있습니다.
나는 SAST에 대한 접근 방식을 세 가지 범주로 나누겠습니다.
취약점 탐지 : Semgrep , Bandit , Nodejsscan 과 같은 도구를 사용하여 코드에서 공격 벡터를 찾습니다. 일반적으로 정리되지 않은 입력, 잘못된 암호화 또는 취약한 라이브러리와 같은 쉬운 결과를 찾을 수 있습니다. 그런데 Semgrep PRO 버전에는 더 많은 규칙이 있습니다. 프로젝트에 개발자가 10명 이하인 경우 무료입니다.
비밀 탐지 : Gitleaks , Trufflehog 또는 Grep은 코드에서 비밀을 찾는 데 도움이 될 수 있습니다. 비밀을 사용하여 권한을 승격하거나 민감한 데이터에 액세스할 수 있기 때문에 이는 중요합니다. 일반적으로 데이터베이스 연결 문자열, API 키 또는 비밀번호가 코드에 저장됩니다.
잘못된 구성 : Checkov 또는 Trivy 와 같은 도구는 잘못된 구성을 찾는 데 도움이 될 수 있습니다. 잘못된 구성은 일반적으로 "코드형 인프라"(IaC) 파일에 있지만 코드 자체에 있을 수도 있습니다. 데이터베이스를 인터넷에 노출하는 잘못 구성된 docker-compose 파일을 예로 들 수 있습니다. Dockerfile을 스캔하려면 hadolint 와 grype 의 조합을 권장합니다
SAST 도구는 완벽하지 않습니다. 그들은 당신에게 거짓 긍정과 거짓 부정을 줄 것입니다. **그러나 일부 애플리케이션을 무작위로 악용하는 것에 비해 시간이 많이 절약됩니다. 저는 침투 테스트 참여 및 대회에서 SAST 도구를 사용했습니다. 이는 코드베이스를 시작하는 데 도움이 되었고 취약점을 찾을 수 있는 위치에 대한 몇 가지 힌트를 제공했습니다.
Hack The Box 로 시작하는 것이 좋습니다. 이 플랫폼은 소스 코드 얻기, 취약점 찾기 등의 과제를 제공합니다. 그런 다음 실제 머신에서 이를 활용합니다. 이는 실제로 SAST 도구를 사용하는 방법을 배울 수 있는 좋은 방법입니다.
또는 개발자인 경우 CI/CD 파이프라인에서 SAST 도구를 사용할 수 있습니다. 이렇게 하면 도구와 해당 출력에 익숙해질 수 있습니다. 동시에 애플리케이션의 보안도 향상됩니다.
SAST 및 비밀 탐지를 시작하는 데 도움이 되는 가이드 목록을 준비했습니다. 이 가이드는 내 논문의 일부로 작성되었으며 SAST 도구에 관심이 있는 모든 사람에게 훌륭한 출발점이 됩니다.
비밀을 탐지할 때 기억하세요. 해커가 알고 있으면 비밀이 아닙니다. 숙련된 개발자라도 실수로 암호나 연결 문자열을 원격 소스 제어에 푸시할 수 있습니다. 다양한 도구를 사용하여 이 가이드는 이러한 위험을 완화할 수 있는 빠르고 쉬운 방법을 제공합니다.
이 가이드에서는 사전 커밋 후크 및 CI/CD 파이프라인을 사용하여 비밀 감지를 이해하는 데 중점을 둡니다. 코드는 주로 GitLab에 중점을 두지만 마지막 섹션에서는 GitHub도 다룹니다.
이 가이드에서는 GitLab에서 SAST(정적 애플리케이션 보안 테스트)를 시작하는 단계를 효율적으로 설명합니다. SAST는 정적 코드 분석을 사용하여 잠재적인 취약점을 식별하는 프로세스입니다.
이 치트 시트는 IaC(Infrastructure as Code) 아티팩트를 스캔하는 데 유용한 도구를 소개하고 이를 CI/CD 파이프라인에 통합하는 방법에 대한 예를 제공합니다.
저는 대규모 코드베이스에 대해 정규식을 신속하게 일치시키는 데 도움이 되는 사용자 정의 도구를 Golang에서 만들었습니다.
정밀도와 분산 사이에는 무한한 균형이 있습니다.
더 많은 차이가 필요하고 수동 검토가 더 필요하다고 가정해 보겠습니다. 이 경우 grep
과 비슷하지만 비밀 탐지에 더 적합한 RegFinder를 사용해 볼 수 있습니다(더 큰 저장소에서 더 빠르고, 출력을 지우고, 일부 파일 확장자를 무시함). 또는 grep을 직접 사용할 수도 있습니다. 가장 중요한 것은 사용할 도구가 아니라 저장소의 정규식입니다 .
grep -n -r your_app/ -Ef regex_dir/general.txt
실행합니다.또는
./regfinder.elf -d your_app/ -f regex_dir/general.txt
실행합니다.기존 정규식 패턴을 확장하는 것은 간단합니다. 이 도구는 자동화된 파이프라인에는 적합하지 않습니다. 그러나 비표준 비밀을 찾아야 하거나 더 많은 수동 작업이 예상되는 보안 검토와 같은 기타 평가에서 유용합니다.
다른 도구에 대한 좋은 경험이 있으면 댓글을 달아주세요 . 읽어 주셔서 감사합니다.