
웹 기반 소스 코드 취약점 스캐너

Raptor는 웹 기반(웹 서비스 + UI) GitHub 중심 소스 취약점 스캐너입니다. 즉, GitHub 저장소 URL만 입력하면 해당 저장소를 스캔합니다. 웹훅을 설정하여 커밋이나 풀 리퀘스트를 머지할 때마다 자동으로 스캔되도록 할 수 있습니다. 스캔은 비동기적으로 수행되며, 결과는 스캔을 시작한 사용자만 볼 수 있습니다.
Raptor의 몇 가지 기능은 다음과 같습니다.
이 도구는 커뮤니티와 스타트업 기업이 보안 코딩에 중점을 두도록 돕기 위한 시도입니다. 이 도구는 상용 대안의 기능/품질과 일치하지 않을 수 있으며, 보장되지 않으며 경고를 받았습니다. 이 도구는 보안 코드 리뷰어 및/또는 보안 코딩 경험이 있는 개발자가 코드 감사 또는 피어 리뷰 중 취약점 진입점을 찾기 위해 사용하도록 설계되었습니다. 도구의 출력을 맹목적으로 신뢰하지 마십시오. 이 도구는 Raptor를 CI/CD 파이프라인에 연결할 때 가장 잘 사용됩니다.
0.1 베타
통합 플러그인:
참고: 다음 도구/모듈/라이브러리 중 대부분은 프레임워크에 잘 통합되도록 상당히 수정되었습니다.
사용 가능한 규칙 팩:
설치 동영상: YouTube 설치
$ wget https://github.com/dpnishant/raptor/archive/master.zip -O raptor.zip
$ unzip raptor.zip
$ cd raptor-master
$ sudo sh install.sh
설치 동영상: YouTube 사용법
cd raptor-master
sudo sh start.sh #백엔드 웹 서비스 시작
이제 브라우저를 Raptor 홈 (http://localhost/raptor/)으로 이동하십시오.
연결된 해당 GitHub 서버에 등록된 사용자 이름으로 로그인하고, 아무 비밀번호나 사용하십시오 (단, 스캔 기록을 보려면 사용자 이름을 기억해야 함).
예를 들어:
https://github.com에 foobar로 등록되어 있다면, https://github.com의 저장소를 스캔할 때 동일한 사용자 이름을 사용하십시오. 그러나 개인/회사 GitHub(예: https://github.corp.company.com)에 foobar_corp로 등록되어 있다면, https://github.corp.company.com의 저장소를 스캔할 때 해당 사용자 이름을 사용하십시오.
그러나 현재로서는 비밀번호는 무엇이든 될 수 있습니다. 개발 버전에서는 데이터베이스를 구현하지 않았기 때문입니다.
번들로 제공되는 경량 클라이언트 측 규칙 편집기를 사용하거나 일반 텍스트 편집기를 사용하여 특정 요구 사항에 맞는 새 규칙을 추가할 수 있습니다. 규칙 팩 파일은 단순한 JSON 구조이기 때문입니다. 브라우저를 사용하여 'backend/rules'에 있는 규칙을 열 수 있습니다. 작업이 끝나면 새로 생성하거나 수정한 규칙 파일을 동일한 디렉토리인 'backend/rules'에 저장하십시오. 그런 다음 약간의 편집만 하면 됩니다. 여기: 초기화 스크립트. 새 규칙 팩 파일 이름을 '.rulepack' 확장자 없이 이 배열에 추가하고 백엔드 서버를 다시 시작하면 됩니다. 준비 완료! 👍
여기에서 액세스할 수 있습니다: 규칙 편집기 (http://localhost/raptor/editrules.php)
스캔에서 제외할 파일 이름 또는 디렉토리 이름 패턴을 추가합니다. 이는 jquery.min.js와 같은 알려진 파일이나 /test/ 디렉토리 전체를 무시하는 데 유용합니다. 예를 들어, 아래 샘플 내용에서 jquery는 jquery를 의미하며 대소문자를 구분하므로 주의하십시오. plugins 섹션에서 플러그인의 name은 rules/ 디렉토리에 있는 ".rulepack" 확장자가 없는 규칙 팩 파일의 이름입니다. issue 필드는 규칙 팩 파일의 각 규칙에 언급된 이슈 ID입니다: 예시 #1, 예시 #2. match_type 필드 값은 regex, start, end 중 하나일 수 있습니다. value 필드는 match_type이 start 또는 end인 경우 일치시킬 정확한 문자열입니다. match_type 필드가 regex인 경우 value에는 JSON 구문 이스케이프 관련 문제를 피하기 위해 Base64로 인코딩된 원시 RegEx 패턴이 포함되어야 합니다. regex는 정규 표현식 기반 일치이며, start는 조각의 시작 부분에서 일치하고, end는 조각의 끝에서 일치합니다.
작동 방식은 스캐너가 문제 검색을 완료한 후, 발견된 모든 문제를 반복하여 ignore_list.rulepack 파일에 언급된 각 플러그인의 패턴(일치 유형 기준)과 일치하는 문제를 제거합니다.
(아래 샘플 내용)
{
"files": [
"/.",
"bootstrap",
"jquery",
"uglify",
"knockout",
"angular",
"backbone",
"ember",
"yui",
"mocha",
"express",
"yql",
"dataTables"
],
"directories": [
"/node_modules/",
"/test/"
],
"plugins": [
{
"name": "common", <----- 플러그인 이름
"issue": "HARD_CRED1", <----- 이슈 ID
"patterns": [
{
"match_type": "start", <----- 일치 유형: "regex", "start" 또는 "end"
"value": "foreach" <----- 일치시킬 실제 문자열. match_type이 "regex"인 경우 이 패턴을 Base64 인코딩
},
{
"match_type": "start",
"value": "for"
},
{
"match_type": "start",
"value": "elseif"
}
]
}
]
}
완전히 새로운 규칙 팩을 생성하여 스캐너에 추가하거나, 직접 스캐너 플러그인을 작성하여 프레임워크에 추가할 수 있습니다. 샘플 규칙 팩 파일은 매우 간단한 JSON 구조입니다.
{
"plugin_type": "plugin_name", <-- 이름 지정 (문자열)
"file_types": [
".java", <-- 스캐너가 스캔 중에 선택할 파일 확장자 추가
".js"
],
"rules": [
{
"id": "HARD_CRED1", <-- 고유한 IssueID, 창의적으로 작성
"severity": "High", <-- "High", "Medium" 또는 "Low" 가능. 이에 따라 UI에서 그래프에 표시됨
"title": "이슈 제목", <-- 이슈 제목
"description": "이 텍스트는 UI에서 이슈 설명으로 표시됩니다.", <-- 이슈 설명, 선택 사항
"remediation": "이 텍스트는 UI에서 이슈 수정 단계로 표시됩니다", <-- 이슈 수정 방법, 선택 사항
"link": "이슈에 대한 추가 리소스가 있는 URL", <-- 이슈 URL, 선택 사항
"example_insecure": "학습 목적으로 취약한 코드 스니펫 버전을 입력하세요.", <-- 선택 사항
"example_secure": "학습 목적으로 안전한 코드 스니펫 버전을 입력하세요.", <-- 선택 사항
"platform_version": "all", <-- 그대로 유지
"enabled": "true", <-- 이 값은 스캔 중 규칙을 활성화 또는 비활성화합니다. "true" 또는 "false" 중 하나
"logic": "향후 업데이트 또는 사용자 정의를 위한 이 규칙의 논리 설명", <-- 선택 사항
"signature": "base64encode(regexp)" <-- 패턴의 정규 표현식을 작성한 다음 base64로 인코딩하여 여기에 넣습니다.
}
]
}
단순한 RegExp 검색보다 더 많은 제어 또는 지능을 스캐너에 추가하려면 이것과 같은 빠른 스캐너 플러그인을 작성하고 여기에 스크립트를 통합한 다음 여기에 스크립트 이름을 추가하면 됩니다. 기본적인 Python 스크립팅 기술이 있는 사람에게는 매우 간단합니다.
조직의 사설 및 공용 GitHub 인스턴스 모두를 스캔하려면 여기와 여기에서 올바른 서버 엔드포인트를 지정하면 됩니다.







