
Salesforce Product Security의 오픈소스 침투 테스트 관리 및 자동화 플랫폼
Vulnreport는 침투 테스트를 관리하고, 보안 엔지니어의 시간을 소모하는 일반적인 오버헤드 없이 잘 형식화되고 실행 가능한 결과 보고서를 생성하기 위한 플랫폼입니다. 이 플랫폼은 프로세스의 모든 단계에서 자동화를 지원하고 침투 테스트 프로세스의 일부로 사용하는 다른 시스템에 맞게 사용자 정의할 수 있도록 설계되었습니다.
Vulnreport는 Salesforce Product Security 팀이 침투 테스트 보고서 작성, 형식 지정 및 교정에 소요되는 시간을 없애기 위해 구축했습니다. 우리의 목표는 계속해서 훌륭한 보안 도구를 구축하여 침투 테스터와 보안 엔지니어가 취약점을 찾고 수정하는 데 집중할 수 있도록 하는 것입니다.
Vulnreport는 Ruby 웹 애플리케이션(Sinatra/Rack 스택)이며, PostgreSQL 데이터베이스와 Redis 캐시 계층을 사용합니다.
Vulnreport는 로컬 VM이나 nginx와 같은 서버 뒤에 설치하거나 Heroku에 배포할 수 있습니다.
로컬에 배포하려면 다음 종속 항목이 설치되어 있어야 합니다:
리포지토리를 클론하고 .env 파일을 열어 필요에 따라 업데이트합니다. 그런 다음 bundle install을 실행합니다. 환경에 맞게 start.sh를 수정해야 할 수도 있습니다. 리포지토리에 포함된 파일은 디버깅/개발 중 로컬 사용을 위한 것입니다.
또한 .env.example을 기반으로 .env 파일을 만들거나, .env에 정의된 것과 동일한 ENV 변수를 환경에 설정해야 합니다.
Heroku에 자동으로 배포할 수 있습니다. 배포 후 아래 지침에 따라 Vulnreport에 로그인하고 구성을 완료합니다.
Heroku에 배포하려면 (Heroku 앱을 생성하고 toolbelt가 설치되어 있다고 가정)
git clone [Vulnreport 리포지토리 URL]
heroku git:remote -a [Heroku 앱 이름]
heroku addons:create heroku-postgresql:hobby-dev
heroku addons:create heroku-redis:hobby-dev
heroku addons:create rollbar:free
heroku addons:create sendgrid:starter
그런 다음 .env 파일을 열고 키/값을 Heroku 앱 설정에 복사합니다(필요한 경우 값 업데이트). 이는 toolbelt CLI 명령으로도 수행할 수 있습니다. 애드온 실행 후 기본 ENV 변수는 괜찮지만 다시 확인할 수 있습니다. VR_SESSION_SECRET은 반드시 업데이트해야 합니다. 프로덕션 설치가 아닌 경우 RACK_ENV를 development로 변경해야 합니다.
heroku config:set VR_SESSION_SECRET=abc123456
heroku config:set RACK_ENV=production
git push heroku master
이제 로컬에서 Vulnreport를 실행하는 것과 동일한 설치 지침을 따를 수 있습니다.
Vulnreport의 초기 구성을 처리하려면 SEED.rb 스크립트를 실행합니다. Heroku에 배포하는 경우 heroku run ./SEED.rb로 실행합니다.
'Deploy to Heroku' 자동 기능을 사용한 경우 이 단계는 자동으로 처리되었을 것입니다.
Running ./SEED.rb on ⬢ vulnreport-test... up, run.8035
Vulnreport 3.0.0.alpha seed script
경고: 이 스크립트는 배포 직후 한 번만 실행한 후 삭제해야 합니다.
지금 Vulnreport를 설정 중입니다...
PostgreSQL 데이터베이스 설정 중...
완료
데이터베이스 시드 중...
완료
사용자 ID 1이 생성되었습니다.
모두 완료! :)
지금 Vulnreport에 로그인하고 나머지 설정을 진행하세요!
이제 SEED.rb 파일을 삭제합니다.
기본 관리자 사용자가 사용자 이름 admin과 비밀번호 admin으로 생성되었습니다. 이는 즉시 변경하거나 SSO를 구성해야 합니다.
이제 Vulnreport URL(예: 위의 https://my-vr-test.herokuapp.com)로 이동하여 생성된 사용자로 로그인합니다. Vulnreport 및 사용자 설정을 통해 Vulnreport 인스턴스를 구성합니다.
이제 준비가 되었습니다. 새로 설치된 Vulnreport 인스턴스를 사용하는 방법에 대한 문서는 전체 문서를 참조하세요: http://vulnreport.io/documentation
Vulnreport는 외부 시스템과 함께 사용하도록 설계되었습니다. 외부 시스템과의 통합/동기화를 위한 인터페이스 구현 방법에 대한 자세한 내용은 사용자 정의 인터페이스 문서(http://vulnreport.io/documentation#interfaces)를 참조하세요.
코드 문서를 생성하려면 Yard를 실행하기만 하면 됩니다.
yard doc
yard server
현재 Vulnreport는 특정 테스트에 취약점을 가져오기 위해 XML 형식을 지원합니다. 이는 Vulnreport가 침투 테스트를 수행하는 네트워크와 다른 네트워크에 있어서 능동적으로 침투 테스트하는 동안 다른 클라이언트를 사용하여 결과를 기록해야 하는 경우 유용하지만, 특정 Vulnreport 인스턴스 및 Vulntypes 구성에 맞게 구성되어야 합니다.
저희는 다른 유형의 XML 가져오기(예: ZAP 및 Burp)와 Vulnreport 인스턴스 간의 임의 XML 내보내기/가져오기를 지원하기 위해 작업 중입니다. 이러한 기능이 곧 제공될 예정이니 계속 지켜봐 주세요.
Vulnreport가 현재 지원하는 XML 형식은 다음과 같습니다.
<?xml version="1.0" encoding="UTF-8"?>
<Test xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Vuln>
<Type>[Vulntype ID]</Type>
<File>[File Vuln Data]</File>
<Code>
[Code Vuln Data]
</Code>
<File>clsSyncLog.cls</File>
<Code>
hello world
</Code>
...etc...
</Vuln>
<Vuln>
<Type>6</Type>
<File>clsSyncLog.cls</File>
<File>CommonFunction.cls</File>
<Code>
12 Public Class CommonFunction{
</Code>
</Vuln>
</Test>
<?xml version="1.0" encoding="UTF-8"?>
<Test xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"">
<Vuln>
<Type>REQUIRED - EXACTLY 1 - INTEGER - ID of VulnType. 0 = Custom</Type>
<CustomTypeName>OPTIONAL - EXACTLY 1 - STRING if TYPE == 0</CustomTypeName>
<BurpData>OPTIONAL - UNLIMITED - STRING - Burp req/resp data encoded in our protocol</BurpData>
<URL>OPTIONAL - UNLIMITED - STRING - URL for finding</URL>
<FileName>OPTIONAL - UNLIMITED - STRING - Name/path of file for finding</FileName>
<Output>OPTIONAL - UNLIMITED - STRING - Output details</Output>
<Code>OPTIONAL - UNLIMITED - STRING - Code details</Code>
<Notes>OPTIONAL - UNLIMITED - STRING - Notes for vuln</Notes>
<Screenshot>
OPTIONAL - UNLIMITED - Screenshots of vuln
<Filename>REQUIRED - EXACTLY 1 - STRING - Filename with extension</Filename>
<ImageData>
REQUIRED - EXACTLY 1 - BASE64 - Screenshot data
</ImageData>
</Screenshot>
</Vuln>
....unlimited vulns....
<Vuln>
</Vuln>
</Test>