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

다양한 플랫폼에서 알려진 또는 매우 취약한 암호화 비밀 값의 사용을 식별하기 위한 순수 파이썬 라이브러리입니다. 이 프로젝트는 다양한 "알려진 비밀 값"(예를 들어, 튜토리얼 예제에서 발견되는 ASP.NET machine key)의 저장소 역할을 하며, 그 사용을 식별하기 위한 언어 독립적인 추상화 계층을 제공하도록 설계되었습니다.
'취약한 비밀 값'이 사용되었는지 아는 것은 보통 그 비밀 값이 사용된 암호화 제품을 조사하는 문제입니다. 예를 들어, 키 기반 해싱 알고리즘으로 서명된 쿠키가 그렇습니다. 각 플랫폼이 제공하는 개별 구현의 특이점을 파고들면 상황이 복잡해질 수 있는데, 이 라이브러리는 이를 완화하는 것을 목표로 합니다.
Black Lantern Security 블로그에서 전체 블로그 글을 확인해 보세요!
Blacklist3r에서 영감을 받아, 지원 플랫폼을 확장하고 언어 및 운영 체제 의존성을 제거하고자 하는 바람에서 시작되었습니다.
수동 모듈은 이미 가지고 있는 암호화 제품(쿠키, 토큰, 서명된 URL 등)을 분석합니다. 알려진 비밀 값 데이터베이스에 대해 제품을 복호화하거나 검증을 시도하여 오프라인으로 작동합니다.
| 이름 | 설명 |
|---|---|
| ASPNET_Viewstate | 알려진 machine key 목록에 대해 viewstate/generator를 검사합니다. |
| ASPNET_Resource | 알려진 machine key 목록에 대해 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 secret_key에 대해 django의 세션 쿠키(signed_cookie 모드일 때)를 검사합니다. |
| Rails_SecretKeyBase | 알려진 secret_key_base에 대해 Ruby on Rails의 서명되거나 암호화된 세션 쿠키(여러 주요 릴리스)를 검사합니다. |
| Generic_JWT | 알려진 HMAC 비밀 값 또는 RSA 개인 키에 대해 JWT를 검사합니다. |
| Jsf_viewstate | 알려진 또는 약한 비밀 키의 사용에 대해 Java Server Faces(JSF)의 Mojarra 및 Myfaces 구현을 모두 검사합니다. |
| Symfony_SignedURL | 알려진 HMAC 키에 대해 symfony "_fragment" URL을 검사합니다. 해시를 포함한 전체 URL에 대해 작동합니다. |
| Express_SignedCookies_ES | 알려진 'session secret'에 대해 express.js express-session 미들웨어의 서명된 쿠키 및 세션 쿠키를 검사합니다. |
| Express_SignedCookies_CS | 알려진 secret에 대해 express.js cookie-session 미들웨어의 서명된 쿠키 및 세션 쿠키를 검사합니다. |
| Laravel_SignedCookies | 알려진 laravel 'APP_KEY'에 대해 'laravel_session' 쿠키를 검사합니다. |
| ASPNET_Compressedviewstate | RCE에 취약한 한때 인기 있었던 사용자 정의 압축 Viewstate 코드 스니펫을 검사합니다. |
| Rack2_SignedCookies | 알려진 비밀 키에 대해 Rack 2.x 서명된 쿠키를 검사합니다. |
| Yii2_SignedCookies | 알려진 쿠키 검증 키에 대해 Yii2 프레임워크 서명된 쿠키를 검사합니다. |
| Shiro_RememberMe | 알려진 AES 암호화 키에 대해 Apache Shiro rememberMe 쿠키를 검사합니다. |
| LTPA_Token | 알려진 LTPA 암호화 키에 대해 IBM WebSphere LtpaToken 및 LtpaToken2 쿠키를 검사합니다. |
| NextAuth | 알려진 또는 약한 NEXTAUTH_SECRET / AUTH_SECRET에 대해 NextAuth.js / Auth.js JWE 세션 쿠키를 검사합니다. |
능동 모듈은 수동 탐지를 한 단계 뛰어넘습니다. 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 install 후 간단히 badsecrets를 실행하는 것입니다:
pip install badsecrets
badsecrets eyJhbGciOiJIUzI1NiJ9.eyJJc3N1ZXIiOiJJc3N1ZXIiLCJVc2VybmFtZSI6IkJhZFNlY3JldHMiLCJleHAiOjE1OTMxMzM0ODMsImlhdCI6MTQ2NjkwMzA4M30.ovqRikAo_0kKJ0GVrAwQlezymxrLGjcEiW_s3UJMMCo
내부적으로는 cli.py 예제를 사용합니다. CLI는 pip 설치 없이도 수동으로 접근할 수 있습니다:
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 모듈을 사용하는 경우, 별도로 할 일은 없습니다. BBOT가 패키지를 설치해 줍니다.
Bad secrets에는 시크릿을 수동으로 확인할 때 편의를 위한 예제 CLI가 포함되어 있습니다. 위에서 언급한 것처럼, 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