금이 갔다! KringleCon 5 하이라이트: 황금반지

금이 갔다! KringleCon 5 하이라이트: 황금반지

2022 SANS 홀리데이 해킹 챌린지에서 배움이 재미를 만납니다. 내가 Grinchum의 파렴치한 계획을 저지하고 XNUMX개의 황금 고리를 되찾을 때 북극에서 크래커잭을 타기 위해 몸을 묶으세요.

올해로 첫 참가입니다 SANS 홀리데이 해킹 챌린지 그리고 그것은 폭발이었다. 쉬운 것부터 어려운 것까지 총 16개의 챌린지를 통해 수상한 네트워크 트래픽과 PowerShell 로그를 분석하고, 글을 쓰는 연습을 했습니다. 수리카타 규칙, 탈출 고정 컨테이너, 유출된 키를 찾아 GitLab CI/CD 파이프라인AWS 사용자, 지휘 XML 외부 엔티티 공격, 스마트 계약을 해킹하여 대체 할 수없는 토큰.

이 경험의 가장 좋은 점은 새로운 도구와 기술을 소개하여 사이버 보안 지식을 훨씬 더 넓혔다는 것입니다. 여기서 저는 도전 과제를 해결하면서 얻은 몇 가지 주요 사항을 공유합니다.

정위

모든 참가자는 북극에 설정된 브라우저 내 비디오 게임 환경을 탐색할 수 있는 아바타를 받습니다.

깨졌어! KringleCon 5의 하이라이트: Golden Rings PlatoBlockchain Data Intelligence. 수직 검색. 일체 포함.

오리엔테이션 동안 게임에서 도전을 완료하고 스마트 계약을 해킹하기 위해 마지막 도전에서 사용하는 KringleCoin을 수여하는 데 사용하는 암호화폐 지갑을 받습니다. 흥미롭게도 이 게임은 이더리움 블록체인의 모든 KringleCoin 트랜잭션을 추적합니다. 즉, 진행 상황의 전체 기록이 이 블록체인에도 저장됩니다.

게임의 첫 번째 링으로 이동합니다.

1. 톨킨 반지

깨졌어! KringleCon 5의 하이라이트: Golden Rings PlatoBlockchain Data Intelligence. 수직 검색. 일체 포함.

Tolkien Ring을 찾으려면 내 로그 분석 근육을 구부려야 했습니다.

Wireshark 피싱

먼저 Wireshark를 사용하여 제공된 .pcap 서버를 공개한 파일 adv.epostoday[.]uk 파일 다운로드 Ref_24-2020-XNUMX.zip 컴퓨터로:

깨졌어! KringleCon 5의 하이라이트: Golden Rings PlatoBlockchain Data Intelligence. 수직 검색. 일체 포함.

ZIP 파일 내부를 들여다보니 다음과 같은 실행 파일을 찾았습니다. Ref_24년 2020월 XNUMX일.scr ESET Endpoint Security에서 두 가지 탐지를 트리거했습니다. BAT/러너.ES 일반.TAGTBG. 이 맬웨어는 결국 메모리에서 실행되는 악성 실행 파일로 이어집니다. config.dll ESET에서 감지 고급 메모리 스캐너 as Win32/Dridex.DD.

윈도우 이벤트 로그

다음으로 제공된 것을 분석했습니다. .evtx 이벤트 뷰어와 함께 PowerShell 로그가 포함된 파일. PowerShell 로그를 분석할 수 있는 다른 도구가 있지만 공격자가 원격 바이너리를 사용하여 레이더를 피하는 방법을 알고 있다면 방어자는 운영 체제가 제공하는 기본 도구에도 정통해야 합니다.

로그에는 10,434개의 이벤트가 포함되어 있으므로 날짜별로 이벤트를 그룹화한 다음 찾기 작업을 실행하여 다음을 포함하는 이벤트를 찾았습니다. $ 캐릭터. 파워쉘에서 $ 만들고 참조하는 데 사용됩니다. 변수. 공격자가 다음 스크립트를 실행했을 때 24년 2022월 XNUMX일에 발생한 공격을 발견했습니다.

깨졌어! KringleCon 5의 하이라이트: Golden Rings PlatoBlockchain Data Intelligence. 수직 검색. 일체 포함.

공격자가 비밀 레시피를 발견한 것 같습니다. for 생선 기름, 그런 다음 새 레시피 파일을 만들었습니다. 이로 인해 원격 PowerShell 명령 실행을 나타내는 ID 4104의 이벤트가 트리거되었습니다. 그래서 이 ID로 이벤트를 필터링하여 추가 악성 이벤트를 더 빨리 찾을 수 있도록 했습니다.

수리카타 레가타

Tolkien Ring에 대한 마지막 연습은 Dridex 침입에 대한 네트워크 트래픽을 모니터링하기 위해 네 가지 Suricata 규칙을 작성하는 것이었습니다.

alert dns $HOME_NET any -> any any (msg:"알려진 잘못된 DNS 조회, Dridex 감염 가능성"; dns.query; content:"adv.epostoday.uk"; nocase; sid:1; rev:1;)

alert http 192.185.57.242 any <> any any (msg:"의심스러운 연결 조사, 가능한 Dridex 감염"; sid:2; rev:1;)

alert tls any any -> any any (msg:"잘못된 인증서 조사, 가능한 Dridex 감염"; tls.cert_subject; 내용:"CN=heardbellith.Icanwepeh.nagoya"; sid:3; rev:1;)

alert http any any -> any any (msg:”의심스러운 JavaScript 함수, Dridex 감염 가능성”; file_data; content:”let byteCharacters = atob”; sid:4; rev:1;)

순서대로 이러한 규칙은 다음에 대한 DNS 조회를 포착합니다. adv.epostoday[.]uk, IP 주소에 대한 연결 192.185.57[.]242, 악성 서버의 사용 허드벨리스.아이칸웨페[.]나고야 일반 이름(CN) TLS 인증서 및 JavaScript 사용 아토브() 클라이언트에서 base64로 인코딩된 데이터가 포함된 이진 문자열을 디코딩하는 함수입니다.

이 세 가지 과제를 완료하여 Tolkien Ring을 얻었습니다.

깨졌어! KringleCon 5의 하이라이트: Golden Rings PlatoBlockchain Data Intelligence. 수직 검색. 일체 포함.

두 번째 링으로 이동합니다.

2. 엘펜 반지

깨졌어! KringleCon 5의 하이라이트: Golden Rings PlatoBlockchain Data Intelligence. 수직 검색. 일체 포함.

Elfen Ring의 가장 눈에 띄는 도전은 Prison Escape와 Jolly CI/CD였습니다.

교도소 탈출

Prison Escape는 Docker 컨테이너의 사용자에게 루트 권한을 부여하는 것이 호스트 시스템에 대한 루트 권한을 부여하는 것만큼이나 좋다는 것을 엄격하게 상기시켜 줍니다. 문제는 컨테이너를 깨는 것이었습니다. 음, 당신이 루트일 때 쉽게 할 수 있습니다:

깨졌어! KringleCon 5의 하이라이트: Golden Rings PlatoBlockchain Data Intelligence. 수직 검색. 일체 포함.

루트 사용자로서 장치의 파티션 테이블을 나열한 다음 호스트 파일 시스템을 마운트하여 호스트에 대한 전체 액세스 권한을 부여했습니다. 이제 게임 내 힌트에서 알 수 있듯이 홈 디렉토리에 있어야 하는 키를 검색할 수 있습니다.

깨졌어! KringleCon 5의 하이라이트: Golden Rings PlatoBlockchain Data Intelligence. 수직 검색. 일체 포함.

졸리 CI/CD

그것은 빠르지만 Jolly CI/CD는 알아내는 데 가장 오랜 시간이 걸렸습니다. 먼저 HTTP를 통해 복제할 Git 리포지토리가 제공되었습니다.

깨졌어! KringleCon 5의 하이라이트: Golden Rings PlatoBlockchain Data Intelligence. 수직 검색. 일체 포함.

URL에서 저장소 이름이 wordpress.flag.net.internal그래서 리포지토리로 이동하여 WordPress 웹 사이트를 찾았습니다. 웹 사이트가 라이브인지 확인했습니다.

깨졌어! KringleCon 5의 하이라이트: Golden Rings PlatoBlockchain Data Intelligence. 수직 검색. 일체 포함.

예, 웹 사이트가 작동했습니다. 소스코드 히스토리에 유출된 키가 있는지 궁금합니다. 그렇다면 편집 내용을 소스 코드에 푸시할 수 있어야 합니다. 그래서 나는 달렸다 자식 로그:

깨졌어! KringleCon 5의 하이라이트: Golden Rings PlatoBlockchain Data Intelligence. 수직 검색. 일체 포함.

커밋 메시지에서 보면 범하다 웁스를 수정하기 위해 자산을 추가한 후 만들어졌습니다. pre-whoops 커밋을 확인할 시간입니다.

깨졌어! KringleCon 5의 하이라이트: Golden Rings PlatoBlockchain Data Intelligence. 수직 검색. 일체 포함.

훌륭합니다. .ssh 키가 있는 디렉토리. 해당 키를 복사하고 SSH 에이전트와 Git 사용자를 구성하여 해당 키의 소유자를 가장할 수 있는지 확인하겠습니다.

깨졌어! KringleCon 5의 하이라이트: Golden Rings PlatoBlockchain Data Intelligence. 수직 검색. 일체 포함.

이제 기본 분기로 돌아가 소스 코드에 사소한 변경 사항을 푸시할 수 있는지 테스트해 보겠습니다(nano를 사용하여 파일 중 하나에 공백을 추가했습니다).

깨졌어! KringleCon 5의 하이라이트: Golden Rings PlatoBlockchain Data Intelligence. 수직 검색. 일체 포함.

그래서 WordPress 개발자 중 한 명을 사칭하여 도전의 첫 번째 부분을 달성했지만 내 푸시 후에도 웹 사이트가 계속 작동합니까?

깨졌어! KringleCon 5의 하이라이트: Golden Rings PlatoBlockchain Data Intelligence. 수직 검색. 일체 포함.

이제 웹사이트가 포트 8080으로 리디렉션되었기 때문에 내 푸시가 변경되었습니다.

지금까지 챌린지의 핵심인 CI/CD 부분을 무시해왔습니다. 저장소에는 .gitlab-ci.yml GitLab CI/CD 파이프라인에 대한 구성을 제공하는 파일입니다. 리포지토리에 푸시할 때마다 CI/CD 시스템이 시작되고 GitLab 러너 이 YML 파일의 스크립트를 실행합니다. GitLab Runner가 설치된 서버에서 원격 코드 실행을 달성하는 것만큼이나 좋다고 생각했습니다.

자세히 보니 rsync Git 리포지토리의 모든 파일을 웹 사이트가 제공되는 웹 서버의 디렉터리로 복사하는 스크립트입니다. 처음에는 사용하려고 rsync 웹 서버에서 Git 리포지토리로 모든 파일을 복사하여 데이터 흐름을 되돌리지만 성공하지 못했습니다.

많은 가설 테스트 후, 저는 결국 획기적인 통찰력을 얻었습니다. WordPress 웹 사이트를 "수정"하거나 빌드 시스템을 통해 악성 스크립트를 실행하는 대신 웹 서버에서 정보를 유출하는 웹 사이트를 제공하십시오. 내부에 index.php (리포지토리의 최상위 수준에 있음) WordPress 웹 사이트를 로드하는 코드를 주석 처리하고 웹 서버를 검색하는 PHP 명령을 실행할 수 있습니다.

실제로 PHP로 쉘 명령을 실행할 수도 있습니다. 나는 그것을 찾았다 통과() 쉽게 일했습니다.

In index.php, 나는 사용했다 // 두 줄을 주석 처리하고 추가했습니다. passthru('ls -la /'); 마지막 줄에. 이렇게 하면 웹 서버의 루트 디렉터리에 있는 모든 파일을 나열하는 웹 사이트가 생성됩니다.

깨졌어! KringleCon 5의 하이라이트: Golden Rings PlatoBlockchain Data Intelligence. 수직 검색. 일체 포함.

그런 다음 이 변경 사항을 Git 리포지토리에 푸시했고 GitLab CI/CD 시스템이 나를 위해 웹 사이트 업데이트를 처리했습니다.

깨졌어! KringleCon 5의 하이라이트: Golden Rings PlatoBlockchain Data Intelligence. 수직 검색. 일체 포함.

아, Elfen Ring이 있어야 합니다. 플래그.txt! 이전 단계를 반복했지만 이번에는 passthru('cat /flag.txt'); 다음에 웹 사이트를 요청했을 때 Elfen Ring을 공개했습니다.

깨졌어! KringleCon 5의 하이라이트: Golden Rings PlatoBlockchain Data Intelligence. 수직 검색. 일체 포함.

세 번째 링으로 이동합니다.

3. 웹 링

깨졌어! KringleCon 5의 하이라이트: Golden Rings PlatoBlockchain Data Intelligence. 수직 검색. 일체 포함.

저에게 가장 재미있는 챌린지는 Open Boria Mine Door 였지만 Glamtariel의 분수는 흥미로웠고 수수께끼도 제시했습니다.

보리아 광산 문 열기

Open Boria Mine Door에서 입력 유효성 검사를 우회하기 위한 XNUMX개의 핀 또는 미니 챌린지 또는 콘텐츠 보안 정책 파이프 색상 일치를 포함하여 핀 사이의 입구 및 출구 파이프를 연결합니다. 대부분의 핀의 경우 HTML을 사용하여 연결 문자 'o'의 목록을 작성했습니다. 내 최종 솔루션은 다음과 같습니다.

깨졌어! KringleCon 5의 하이라이트: Golden Rings PlatoBlockchain Data Intelligence. 수직 검색. 일체 포함.

핀 1

핀 1에 대한 유효성 검사가 없었으므로 HTML 및 인라인 CSS의 간단한 문제였습니다.

핀 2

핀 2에는 JavaScript를 허용하지 않지만 인라인 CSS를 허용하는 콘텐츠 보안 정책이 있으므로 내 방법에서는 문제가 되지 않았습니다.

핀 3

핀 3에는 CSS를 허용하지 않지만 인라인 JavaScript를 허용하는 콘텐츠 보안 정책이 있으므로 대신 JavaScript를 사용하여 스타일을 변경했습니다.

핀 4

핀 4에는 콘텐츠 보안 정책이 없었지만 클라이언트 측에 큰따옴표, 작은따옴표, 왼쪽 꺾쇠 괄호 및 오른쪽 꺾쇠 괄호를 제거하는 sanitizeInput 기능이 있었습니다. 여기서 요령은 이 기능이 양식을 제출함으로써 트리거되는 것이 아니라 온 블러 이벤트. 즉, 입력 필드에서 멀리 마우스를 이동하면 온 블러 모든 입력을 삭제하는 이벤트. 해결책은 엔터 버튼 입력 필드 범위 밖으로 마우스 커서를 움직이지 않도록 주의하면서 키를 누릅니다.

핀 5

핀 5는 동일했습니다. 새니타이즈입력 인라인 CSS를 금지하지만 인라인 JavaScript를 허용하는 콘텐츠 보안 정책과 함께 기능 및 우회:

핀 6

마지막으로 핀 6은 입력을 삭제하지 않았지만 인라인 CSS와 JavaScript를 모두 금지하는 더 엄격한 콘텐츠 보안 정책을 사용했습니다. 내 솔루션은 더 이상 사용되지 않는 HTML을 사용하여 필요한 스타일을 가져오고 목록 대신 테이블을 사용하는 것입니다.

글램타리엘의 분수

글램타리엘의 분수 연습할 수 있는 기회였다 XXE(XML 외부 엔티티) 공격. 사용자 지정 XML 엔터티를 정의하는 방법, 서버에서 파일을 요청하는 엔터티를 정의하고 해당 엔터티를 HTTP 요청에 대한 페이로드로 추가하는 방법을 파악하는 것은 어렵지 않았습니다. 가장 어려운 부분은 서버가 유출할 파일의 경로를 예측하기 위해 게임 내 수수께끼를 알아내는 것이었습니다. 다음은 금반지의 위치를 ​​알려주는 획기적인 요청입니다.

깨졌어! KringleCon 5의 하이라이트: Golden Rings PlatoBlockchain Data Intelligence. 수직 검색. 일체 포함.

깨졌어! KringleCon 5의 하이라이트: Golden Rings PlatoBlockchain Data Intelligence. 수직 검색. 일체 포함.

깨졌어! KringleCon 5의 하이라이트: Golden Rings PlatoBlockchain Data Intelligence. 수직 검색. 일체 포함.

저는 이 도전에서 얻은 두 가지 교훈을 제시하고 싶습니다. 먼저, 콘텐츠 유형 변환기 확장 트림 JSON 페이로드를 XML로 변환합니다. 둘째, XXE 페이로드를 다른 태그에 배치해 보십시오. &xxe; 페이로드 요청 유형 대신 태그 imgDrop 꼬리표.

네 번째 링으로 이동합니다.

4. 클라우드 링

깨졌어! KringleCon 5의 하이라이트: Golden Rings PlatoBlockchain Data Intelligence. 수직 검색. 일체 포함.

Cloud Ring에서 플레이하는 것은 Amazon Web Services(AWS) 명령줄 인터페이스(CLI)에 대한 초보자의 진출이었습니다.

이 도전 과제의 하이라이트는 송로 버섯 Git 리포지토리에서 AWS 자격 증명을 찾은 다음 이를 악용하여 AWS 사용자로 인증합니다. 이 위치에 도달한 공격자는 다음을 사용할 수 있습니다. 으아악 사용자에게 적용되는 정책과 이에 따라 어떤 클라우드 자산에 액세스하고 남용할 수 있는지 쿼리하는 명령입니다.

다섯 번째 링으로 이동합니다.

5. 불타는 불의 고리

깨졌어! KringleCon 5의 하이라이트: Golden Rings PlatoBlockchain Data Intelligence. 수직 검색. 일체 포함.

이 일련의 도전에서 가장 유익한 부분은 다음에 대해 배우는 것이었습니다. 머클 나무 스마트 계약을 이용하고 NFT(Non-Fungible Token) 구매를 위한 프리세일 목록에 오르기. 여기서 도전 과제는 내 지갑 주소 및 Merkle Tree의 루트 값과 함께 내가 프리세일 목록에 포함되었음을 증명하는 증명 값을 찾는 것이었습니다.

증명 값을 제공하려는 시도가 몇 번 실패한 후, 이를 계산하는 데 사용된 리프 값을 모두 알 수 있는 방법이 없기 때문에 제공된 루트 값에 대한 증명 값을 알아낼 수 없다는 것을 깨달았습니다. 유효한 Merkle Tree를 제공할 수 있도록 루트 값을 변경해야 했습니다.

사용 QPetabyte 교수의 도구, 내 지갑 주소와 지갑 주소로 구성된 두 개의 리프에서 머클 트리를 만들었습니다 BSRS_nft 게임의 이더리움 블록체인의 두 번째 블록에서 게임 내 블록체인 탐색기를 사용하여 찾은 스마트 계약입니다. 도구는 이 트리의 루트 값과 내 지갑 주소에 대한 증명 값을 생성했습니다. 그런 다음 Burp를 사용하여 서버에 대한 요청을 가로채고 유효한 Merkle Tree를 제출할 수 있도록 기본 루트 값을 변경했습니다. 여기 나의 NFT 스포츠 100 KringleCoins의 고정 가격으로 구매:

깨졌어! KringleCon 5의 하이라이트: Golden Rings PlatoBlockchain Data Intelligence. 수직 검색. 일체 포함.

참으로 못생긴 표본.

최종

깨졌어! KringleCon 5의 하이라이트: Golden Rings PlatoBlockchain Data Intelligence. 수직 검색. 일체 포함.

새로운 방식으로 마음을 넓히고 사이버 보안 지식을 심화할 수 있도록 도와준 SANS Holiday Hack Challenge의 주최자에게 큰 감사를 드립니다. 내년 도전이 기대될 뿐 아니라 이번 도전의 2020년판과 2021년판도 도전해보려고 합니다. 이전에 이 챌린지에 참가한 적이 없다면 이 하이라이트가 여러분의 관심을 불러일으켰기를 바랍니다.

타임 스탬프 :

더보기 우리는 보안을 산다