
다양한 웹 프레임워크에서 알려진 비밀을 탐지하는 라이브러리

알려져 있거나 매우 약한 암호화 비밀을 다양한 플랫폼에서 식별하기 위한 순수 파이썬 라이브러리입니다. 이 프로젝트는 다양한 "알려진 비밀"(예: 튜토리얼 예제에서 발견된 ASP.NET 머신 키)의 저장소 역할을 하면서, 이를 식별하기 위한 언어에 구애받지 않는 추상화 계층을 제공하도록 설계되었습니다.
'잘못된 비밀'이 사용되었는지 알 수 있는 방법은 일반적으로 해당 비밀이 사용된 암호화 결과물(예: 키 해시 알고리즘으로 서명된 쿠키)을 검사하는 것입니다. 각 플랫폼이 제공하는 개별 구현 특이점을 깊이 파고들면 복잡해질 수 있는데, 이 라이브러리는 이를 완화하는 것을 목표로 합니다.
Black Lantern Security 블로그에서 전체 블로그 게시물을 확인하세요!
Blacklist3r에서 영감을 받았으며, 지원 플랫폼을 확장하고 언어 및 운영 체제 종속성을 제거하려는 목표를 가지고 있습니다.
수동 모듈은 이미 가지고 있는 암호화 결과물(쿠키, 토큰, 서명된 URL 등)을 분석합니다. 알려진 비밀 데이터베이스에 대해 결과물을 복호화하거나 검증하여 오프라인에서 작동합니다.
| 이름 | 설명 |
|---|---|
| ASPNET_Viewstate | 뷰스테이트/생성기를 알려진 머신 키 목록과 비교합니다. |
| ASPNET_Resource | WebResource.axd 및 ScriptResource.axd 암호화 URL을 알려진 머신 키 목록과 비교합니다. 페이지에 __VIEWSTATE가 없을 때 유용합니다. |
| Telerik_HashKey | 패치된(2017+) 버전의 Telerik UI에 대해 알려진 Telerik.Upload.ConfigurationHashKey를 확인합니다. |
| Telerik_EncryptionKey | 패치된(2017+) 버전의 Telerik UI에 대해 알려진 Telerik.Web.UI.DialogParametersEncryptionKey를 확인합니다. |
| Flask_SignedCookies | 약한 Flask 쿠키 서명 비밀번호를 확인합니다. flask-unsign의 래퍼입니다. |
| Peoplesoft_PSToken | Peoplesoft PS_TOKEN에 대해 잘못되었거나 약한 서명 비밀번호를 확인할 수 있습니다. |
| Django_SignedCookies | Django의 세션 쿠키(signed_cookie 모드)를 알려진 Django secret_key에 대해 확인합니다. |
| Rails_SecretKeyBase | Ruby on Rails의 서명된 또는 암호화된 세션 쿠키(여러 주요 릴리스)를 알려진 secret_key_base에 대해 확인합니다. |
| Generic_JWT | JWT에 대해 알려진 HMAC 비밀 또는 RSA 개인 키를 확인합니다. |
| Jsf_viewstate | Java Server Faces(JSF)의 Mojarra 및 Myfaces 구현 모두에 대해 알려지거나 약한 비밀 키 사용을 확인합니다. |
| Symfony_SignedURL | symfony "_fragment" URL에 대해 알려진 HMAC 키를 확인합니다. 해시를 포함한 전체 URL에서 작동합니다. |
| Express_SignedCookies_ES | express.js express-session 미들웨어의 서명된 쿠키 및 세션 쿠키에 대해 알려진 'session secret'을 확인합니다. |
| Express_SignedCookies_CS | express.js cookie-session 미들웨어의 서명된 쿠키 및 세션 쿠키에 대해 알려진 시크릿을 확인합니다. |
| Laravel_SignedCookies | 'laravel_session' 쿠키를 알려진 laravel 'APP_KEY'에 대해 확인합니다. |
| ASPNET_Compressedviewstate | 한때 인기 있었던 사용자 정의 압축 Viewstate 코드 스니펫이 RCE에 취약한지 확인합니다. |
| Rack2_SignedCookies | Rack 2.x 서명된 쿠키를 알려진 비밀 키에 대해 확인합니다. |
| Yii2_SignedCookies | Yii2 프레임워크 서명된 쿠키를 알려진 쿠키 검증 키에 대해 확인합니다. |
| Shiro_RememberMe | Apache Shiro rememberMe 쿠키를 알려진 AES 암호화 키에 대해 확인합니다. |
| LTPA_Token | IBM WebSphere LtpaToken 및 LtpaToken2 쿠키를 알려진 LTPA 암호화 키에 대해 확인합니다. |
능동 모듈은 수동 탐지를 한 단계 더 발전시킵니다. YARA 기반 사전 필터링을 사용하여 라이브 대상의 특징(HTTP 응답 헤더, 쿠키, 본문 내용 기반)을 식별한 다음, 알려진 키로 암호화 결과물을 위조하여 대상에 전송함으로써 키가 수락되는지 확인합니다. 이는 아직 분석할 토큰이 없지만 대상이 기본 또는 잘 알려진 비밀을 사용하고 있을 가능성이 있을 때 유용합니다.
능동 모듈은 URL 모드(--url)에서 기본적으로 활성화됩니다. 비활성화하려면 --passive-only를 사용하세요.
| 이름 | 설명 |
|---|---|
| Shiro_RememberMe_Key | 알려진 AES 키로 Apache Shiro rememberMe 쿠키를 위조하고 대상이 이를 수락하는지 테스트합니다(역직렬화 RCE). |
| GlobalProtect_DefaultMasterKey | PAN-OS GlobalProtect 포털에서 기본 마스터 암호화 키 사용을 테스트합니다. |
| LTPA_Token_Key | 알려진 LTPA 키로 IBM WebSphere LtpaToken2 쿠키를 위조하고 대상이 인증을 부여하는지 테스트합니다(인증 우회). |
pypi 패키지를 제공하므로 pip install badsecrets를 실행하기만 하면 라이브러리를 사용할 수 있습니다.
Badsecrets를 사용하는 가장 좋은 방법은 pip 설치 후 badsecrets를 실행하는 것입니다:```
pip install badsecrets
badsecrets eyJhbGciOiJIUzI1NiJ9.eyJJc3N1ZXIiOiJJc3N1ZXIiLCJVc2VybmFtZSI6IkJhZFNlY3JldHMiLCJleHAiOjE1OTMxMzM0ODMsImlhdCI6MTQ2NjkwMzA4M30.ovqRikAo_0kKJ0GVrAwQlezymxrLGjcEiW_s3UJMMCo
내부적으로는 `cli.py` 예제를 사용합니다. CLI는 pip 설치 없이 수동으로 액세스할 수도 있습니다:
#### pip 설치 없이:```bash
git clone https://github.com/blacklanternsecurity/badsecrets.git
cd badsecrets
python ./badsecrets/examples/cli.py eyJhbGciOiJIUzI1NiJ9.eyJJc3N1ZXIiOiJJc3N1ZXIiLCJVc2VybmFtZSI6IkJhZFNlY3JldHMiLCJleHAiOjE1OTMxMzM0ODMsImlhdCI6MTQ2NjkwMzA4M30.ovqRikAo_0kKJ0GVrAwQlezymxrLGjcEiW_s3UJMMCo
예제를 사용하려면, pip install을 한 후에 리포지토리를 git clone하고 badsecrets 디렉토리로 cd하십시오:```
git clone https://github.com/blacklanternsecurity/badsecrets.git
cd badsecrets
아래 예제 섹션의 명령어는 현재 디렉토리에 있다고 가정합니다.
만약 Badsecrets [BBOT](https://github.com/blacklanternsecurity/bbot) 모듈을 사용 중이라면, 다른 작업을 할 필요가 없습니다 - BBOT이 패키지를 자동으로 설치해 드립니다.
### cli.py
Bad secrets는 수동으로 시크릿을 확인할 때 편의를 위해 [예제 CLI](https://github.com/blacklanternsecurity/badsecrets/blob/dev/badsecrets/examples/cli.py)를 포함하고 있습니다. 위에서 언급했듯이, pip 설치 후 `badsecrets`를 실행하는 것만으로도 접근할 수 있습니다.
#### 사용법```
usage: badsecrets [-h] [-nc] [-j] [-u URL] [-nh] [-c FILE_OR_MODULE:KEYS]
[-p PROXY] [-a USER_AGENT] [-H HEADER] [-d] [-t TIMEOUT]
[-P] [-l]
[product ...]
Check cryptographic products against badsecrets library
positional arguments:
product Cryptographic product to check for known secrets
options:
-h, --help show this help message and exit
-nc, --no-color Disable color message in the console
-j, --json Output results as JSON only (no banner, no color).
Outputs nothing on no detection
-u URL, --url URL Use URL Mode. Specified the URL of the page to access
and attempt to check for secrets
-nh, --no-hashcat Skip the check for compatable hashcat commands when
secret isn't found
-c FILE_OR_MODULE:KEYS, --custom-secrets FILE_OR_MODULE:KEYS
Custom secrets to check. Can be specified multiple
times. Without a module prefix, the file is loaded for
all modules. With a module prefix (MODULE:value), keys
are targeted to that module only. Value can be a file
path or comma-separated inline keys. Example: -c
my_keys.txt or -c Shiro_RememberMe_Key:key1,key2 or -c
GlobalProtect_DefaultMasterKey:keys.txt
-p PROXY, --proxy PROXY
In URL mode, Optionally specify an HTTP proxy
-a USER_AGENT, --user-agent USER_AGENT
In URL mode, Optionally set a custom user-agent
-H HEADER, --header HEADER
Custom header (e.g., -H 'Cookie: foo=bar'). Can be
specified multiple times
-d, --debug Enable debug output (request URL, response status,
headers, etc.)
-t TIMEOUT, --timeout TIMEOUT
Request timeout in seconds (default: 10)
-P, --passive-only Disable active probing in URL mode (only run passive
analysis)
-l, --list-modules List all available modules with descriptions and exit
URL 모드를 갖추고 있으며, 대상에 연결하여 암호화 제품을 추출하고 발견된 모든 제품을 모든 모듈과 대조하여 확인합니다.