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

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인 경우 일치시킬 정확한 문자열입니다. 필드가 인 경우 에는 JSON 구문 이스케이프 관련 문제를 피하기 위해 Base64로 인코딩된 원시 RegEx 패턴이 포함되어야 합니다. 는 정규 표현식 기반 일치이며, 는 조각의 시작 부분에서 일치하고, 는 조각의 끝에서 일치합니다.
작동 방식은 스캐너가 문제 검색을 완료한 후, 발견된 모든 문제를 반복하여 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 인스턴스 모두를 스캔하려면 여기와 여기에서 올바른 서버 엔드포인트를 지정하면 됩니다.











기여하고 싶으신가요? 좋습니다! 아이디어가 있으시면 연락주시거나, 포크하여 개선하셔도 됩니다. 😊
GNU GPL v2.0
무료 소프트웨어, Hell Yeah!
match_typeregexvalueregexstartend