
Chromium 쿠키 및 비밀번호를 브라우저 간에 복제 및 가져오기, 오프라인 DPAPI 상태 키 복호화를 통해 AES-256 GCM 암호화 데이터베이스를 지원하며, 레드팀 운영을 위한 도구입니다.
Chlonium은 Chromium 쿠키를 복제하기 위해 설계된 애플리케이션입니다.
Chromium 80 이상부터 쿠키는 AES-256 GCM으로 암호화되며, 상태 키는 Local State 파일에 저장됩니다. 이 상태 키는 DPAPI를 사용하여 암호화됩니다. 이는 이전 버전에서 쿠키 데이터베이스의 각 쿠키 항목을 DPAPI로 암호화하던 방식에서 변경된 것입니다. 즉, 상태 키를 가지고 있다면 DPAPI 키에 지속적으로 접근할 필요 없이 오프라인에서 쿠키 데이터베이스를 항상 복호화할 수 있습니다.
이것은 기본적으로 쿠키 데이터베이스를 "이식 가능"하게 만들어, 상태 키를 덤프했다면 시스템 간에 이동할 수 있음을 의미합니다. 가져올 때 쿠키 자체는 다시 암호화되어야 하는데, 그 이유는 각 사용자 프로필과 시스템마다 상태 키가 다르기 때문입니다. 이는 "대상" 브라우저에서 상태 키를 먼저 복호화한 후 각 항목을 새 키로 다시 암호화하는 동일한 복호화 과정을 사용하여 수행할 수 있습니다.
이 프로젝트는 C#으로 작성되었으며 두 개의 개별 구성 요소가 있습니다. 첫 번째 구성 요소인 chlonium.exe는 수집 바이너리입니다. 단순히 상태 키를 복호화하여 출력합니다. 이 키를 기록해 두면 나중에 업데이트된 쿠키가 필요할 때 Cookies 데이터베이스 파일을 다운로드하여 쿠키를 복호화할 수 있습니다. 기본적으로 Chrome 상태 키를 복호화하려고 시도합니다. 다른 브라우저(예: Edge)의 상태 키를 덤프하려면 키 경로를 지정할 수 있습니다.
예를 들어:
> Chlonium.exe "c:\users\user\AppData\Local\Microsoft\Edge\User Data\Local State"
[+] Statekey = 3Cms3YxFXVyJRUbulYCnxqY2dO/jubDkYBQBoYIvqfc=
두 번째 구성 요소인 ChloniumUI.exe는 "가져오기" 도구입니다. 주어진 상태 키로 특정 Cookies 데이터베이스 파일을 복호화하고, 값을 현재 사용자의 상태 키로 다시 암호화한 후 선택한 브라우저로 쿠키를 가져오는 작업을 처리합니다. 쿠키를 가져올 시스템에서 실행합니다.
사용하려면 ChloniumUI.exe 실행 파일을 실행하세요. 이전에 추출한 상태 키를 입력하고, 가져올 Cookies 파일을 선택한 다음, 쿠키를 가져올 브라우저를 선택하세요. 그런 다음 "Import Cookies"를 클릭하면 쿠키가 가져와집니다.
ChloniumUI는 현재 세 가지 Chromium 기반 브라우저(Edge, Chrome, Vivaldi)를 지원합니다. 추가 브라우저는 Browsers.cs에 추가할 수 있습니다. 이는 Edge 쿠키 파일을 Chrome으로 가져오거나 그 반대로 가져올 수 있는 의도하지 않은 이점을 제공하지만(예:), 사용자 에이전트가 일치하지 않을 것이므로 좋은 생각이 아닐 수 있습니다.
중요 참고 사항: 쿠키 파일을 브라우저로 가져올 때 모든 이전 쿠키가 지워집니다! 백업이 현재 디렉터리(해당 타임스탬프와 함께)에 복사됩니다. 이전 쿠키를 복원해야 하는 경우 백업 파일을 Cookies 파일로 복사하기만 하면 됩니다.
Mimikatz 및 SharpChromium과 같은 도구는 이미 Chrome 80 쿠키를 덤프할 수 있는 기능이 있습니다. 왜 또 다른 도구일까요?
이 도구는 쿠키를 다른 브라우저로 가져오는 것을 더 쉽게 만드는 데 특별히 목표를 두고 있습니다. 이러한 도구들이 Chromium 쿠키(및 그 이상!)를 덤프하는 데는 훌륭하지만, 저는 다른 브라우저로 쉽게 가져올 수 있는 무언가를 원했습니다. 타사 쿠키 관리자 플러그인이 존재하지만, 항상 까다롭고 오류가 발생하기 쉬웠습니다. CloniumUI는 쿠키를 브라우저의 sqlite 데이터베이스에 직접 가져와 이 과정을 더 쉽게 만들도록 설계되었습니다.
이 프로젝트에는 상태 키 덤프를 돕는 chlonium.exe 수집기가 포함되어 있지만, 이것은 실제로 예시에 불과합니다. Mimikatz와 같은 다른 도구도 잠재적으로 더 은밀한 방식(실행 환경, 실행 방법 등에 따라 다름)으로 상태 키를 덤프할 수 있습니다. 또한 SharpDPAPI는 DPAPI 상태 키, 현재 비밀번호 또는 도메인 백업 키가 있는 경우 Chromium 상태 키 파일을 복호화할 수 있도록 하여 SMB를 통해 원격으로 쿠키를 덤프할 수 있습니다!
Red Teaming을 수행할 때 지속적인 기간(예: 매일/매주) 동안 사용자의 쿠키를 여러 번 덤프해야 하는 경우가 있습니다. .NET 어셈블리, 반사 DLL 또는 기타 메모리 내 실행 기술을 사용하여 대상 시스템에서 직접 쿠키 파일에서 개별 쿠키를 추출하는 것은 불필요하며 운영자가 탐지될 위험을 증가시킵니다. 대신 상태 키를 한 번 덤프하고, 새로운 쿠키가 필요할 때마다 Cookies 데이터베이스 파일을 복사해 오기만 하면 추가 실행이 필요하지 않습니다.
비디오 데모는 여기를 참조하세요.
ChloniumUI는 비밀번호 가져오기 및 내보내기도 지원합니다. 이 기능을 사용하려면 Cookies DB 대신 Login Data 데이터베이스 경로를 상태 키와 함께 제공하고, 가져올 브라우저를 선택하면 됩니다(내보내기의 경우 이는 중요하지 않습니다). 이를 통해 비밀번호를 일반 텍스트로 파일에 내보내거나 브라우저로 가져올 수 있습니다. 쿠키와 마찬가지로 Chrome 비밀번호를 Edge로, Edge 비밀번호를 Vivaldi로 가져올 수 있습니다.
Chlonium은 오프라인 상태 키 복호화를 지원하며, 다음 파일을 모두 가지고 있으면 사용자의 상태 키를 오프라인에서 복호화할 수 있습니다:
C:\Users\<user>\AppData\Local\<browser>\User Data\Local State의 Local State 파일C:\Users\<user>\AppData\Roaming\Microsoft\Protect\<SID>\의 DPAPI 마스터키 파일그리고 다음 중 하나:
LsaRetrievePrivateData API 메서드에서)이제 "Offline statekey decryption" 탭에서 이 값을 제공하기만 하면 Chlonium이 먼저 DPAPI 마스터키를 복호화(백업 키 또는 비밀번호 사용)한 다음 이 키를 사용하여 상태 키를 복호화하여 암호화된 상태 키를 복호화하려고 시도합니다. 상태 키가 복호화되면 "Import or Export Database" 탭에서 쿠키/비밀번호를 검색하는 데 사용할 수 있습니다.
사용 참고 사항: 사용자 비밀번호를 사용하여 DPAPI 마스터키를 복호화할 때 Chlonium은 먼저 DPAPI 마스터키 폴더 내의 BK-<NETBIOSDOMAINNAME> 파일에서 사용자의 SID를 추출하려고 시도합니다. 실패하거나 파일이 존재하지 않는 경우 DPAPI 마스터키 폴더 이름(기본적으로 사용자 SID로 이름 지정됨)에서 SID를 가져오려고 시도합니다. 폴더 이름을 변경했거나 BK 파일의 복사본이 없는 경우 비밀번호를 사용하여 마스터키를 복호화할 수 없습니다.
이 기능은 @harmj0y의 훌륭한 SharpChrome 및 SharpDPAPI 프로젝트를 활용합니다. 모든 크레딧은 SharpDPAPI의 원저자에게 돌아갑니다.
Cookie 또는 Login 데이터베이스를 가져올 때 Chlonium은 "Importer"를 선택할 수 있는 옵션을 제공합니다. Database Importer(기본값) 또는 StateKey Importer 중에서 선택할 수 있습니다. 기본 Database Importer는 소스 데이터베이스의 각 항목을 복호화하고 현재 상태 키로 다시 암호화한 다음 현재 브라우저의 데이터베이스로 가져옵니다. 일반적으로 잘 작동하지만 브라우저 업데이트로 인해 데이터베이스 스키마가 변경되면 Chlonium이 새 스키마를 처리하기 위해 업데이트가 필요할 수 있습니다. 이 문제를 해결하기 위해 StateKey Importer가 만들어졌습니다. 데이터베이스의 각 항목을 다시 암호화하는 대신(데이터베이스 스키마를 알아야 함) 간단히 Local State 파일에 저장된 상태 키를 소스 데이터베이스와 일치하도록 DPAPI로 다시 암호화할 수 있습니다. 그러면 SQL을 통해 데이터베이스 내용을 조작할 필요 없이 Cookie DB 파일을 교체할 수 있습니다. 이 방법은 스키마 변경에 더 탄력적이어야 하지만, 상태 키가 더 이상 유효하지 않게 되어 이전 Cookie 파일을 사용할 수 없다는 부작용이 있습니다. 복원 문제를 방지하기 위해 Local State 파일은 원래 Cookie/Login 데이터베이스와 함께 현재 디렉터리에 백업됩니다. 필요하면 수동으로 복원할 수 있습니다. 또한 각 데이터베이스 항목을 다시 암호화할 필요가 없기 때문에 StateKey Importer가 훨씬 빠릅니다!
요약: Database Importer에 문제가 있는 경우 StateKey Importer를 선택해 보세요 :)
Chrome Local State 및 Cookies 파일(그리고 Login Data 및 History와 같은 기타 민감한 파일)에 SACL을 설정합니다. 이러한 파일을 여는 의심스러운 프로세스(예: 브라우저 관련이 아닌 프로세스)를 찾습니다.
SACL 설정에 대한 @cryps1s의 훌륭한 블로그 게시물을 확인하세요.
파일 시스템 필터 드라이버를 사용하는 AV 공급업체의 경우 브라우저 관련이 아닌 프로세스가 이러한 파일을 여는 것을 차단하는 것을 고려하세요. 예: PowerShell이 Cookies 파일을 여는 경우.