Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
snapshot-demo — CVE-2022-27499 | Kitploit
도구/GitHubGitHub/web-logs2/snapshot-demo
Encryption/Decryption ToolsVulnerability AnalysisExploitationPenetration TestingHardware SecurityRed Teaming
GitHubweb-logs2/snapshot-demo

snapshot-demo

CVE-2022-27499

저장소 보기
3년 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

스냅샷 공격 데모

이것은 우리가 발견한 예기치 않은 스냅샷 공격(Unanticipated Snapshot Attack)의 원본 데모입니다. 보안 권고를 제공한 Intel에 감사드립니다.

데모 빌드

Intel SGX SDK 및 Occlum 설치

우선, 데모를 실행하려는 사람은 Intel SGX SDK와 Occlum을 설치해야 합니다 (수정된 SGX SDK를 사용할 수도 있습니다). 빠른 Occlum/SDK 설치를 위해 Dockerfile을 제공합니다. 수정된 SGX SDK는 공격자가 타이밍을 결정하는 데 도움을 주기 위한 것입니다.

호스트 머신에 Occlum을 설치할 수도 있습니다. (자세한 설치 방법은 https://github.com/occlum/occlum 을 참조하세요.) 어느 쪽이든 호스트에 Intel SGX 드라이버를 먼저 설치하거나, 커널 내장 SGX 드라이버를 사용해야 합니다.

root@kitploit:~
(sudo) docker build -t $Your_Image_Name .

이미지가 빌드된 후 다음을 실행하세요.

root@kitploit:~
(sudo) docker run -it --privileged -p $Redis_Server_Port:6379 -v $Host_SGX_Driver_Path:/dev/sgx --name "snapshot-demo" $Your_Image_Name

여기서 $Redis_Server_Port는 컨테이너 내부의 Redis 서버에 노출하려는 호스트 포트 번호이고, $Host_SGX_Driver_Path는 앞서 언급한 설치된 SGX 드라이버의 장치 경로입니다.

대상 프로그램 빌드

대상 프로그램은 bash_redis 폴더에 있습니다.

희생자 프로그램은 bash 셸 스크립트(occlum_bash.sh)를 실행합니다. 먼저 프로비저닝된 비밀번호를 가져와 "requirepass" 항목이 채워진 사용자 지정 Redis 구성 파일을 생성합니다. 그런 다음 사용자 지정 구성 파일에 따라 Redis 서버를 호출합니다.

구성 생성 프로그램을 빌드하려면 make를 실행하세요. Redis 서버를 빌드하려면 다음 명령어를 실행하세요.

root@kitploit:~
cd bash_redis
./download_and_build_redis_glibc.sh

데모 실행

희생자 Redis 프로그램이 정상 동작하는지 확인

희생자용 터미널을 여세요. Redis 서버가 제대로 동작하는지 확인하면서 run_redis.sh를 실행하세요.

redis-cli -h $Redis_Server_IP -p $Redis_Server_Port -a admin123456 명령을 사용하여 비밀번호(admin123456)가 구성 파일에 설정되었는지 확인하세요.

ctrl + C를 눌러 Redis 서버를 종료하세요.

스냅샷 캡처

희생자용 터미널 1개와 공격자용 터미널 1개, 총 2개의 터미널을 준비하세요. 희생자용 터미널이 이미 열려 있다면 공격자용 터미널 하나만 추가로 열면 됩니다.

희생자 터미널에서 run_redis.sh를 다시 실행하세요. 이 스크립트는 대상 프로그램을 시작합니다.

공격자는 스냅샷이 플러시되고 있음을 확인할 수 있는 시점에 (./take_snapshot_step-1.sh를 사용하여) 스냅샷을 캡처해야 합니다. 데모에서 공격자는 희생자 터미널에서 다음과 같은 명확한 알림을 확인할 수 있습니다.

root@kitploit:~
...
Run ./take_snapshot_step-1.sh NOW!
line 4522: # passwords, then flags, or key patterns. However note that the additive
line 4523: # and subtractive rules will CHANGE MEANING depending on the ordering.
line 4524: # For instance see the following example:
...

공격자 터미널에서 ./take_snapshot_step-1.sh 스크립트를 실행하세요.

수정된 SGX SDK로 Occlum을 빌드하면 더 많은 힌트 메시지를 볼 수 있습니다. 이는 Intel SGX SDK의 신뢰할 수 없는(untrusted) 부분을 수정하여 공격자가 타이밍을 결정하는 데 도움이 되는 보조 메시지를 출력하기 때문입니다. 공격자의 편의를 위해, 공격자가 ./take_snapshot_step-1.sh를 실행할 수 있도록 시간 슬롯을 예약해 두었습니다. 실제로 호스트 루트 권한을 가진 공격자는 SGX SDK의 신뢰할 수 없는 부분을 수정하여 enclave 실행을 가로채고 모든 스냅샷을 캡처할 수 있습니다.

Redis 서버가 시작되어 실행되면 ./take_snapshot_step-2.sh를 실행하여 스냅샷 수집을 완료하세요.

Enclave 리플레이

공격자는 수집된 스냅샷을 사용하여 enclave를 리플레이하기 위해 replay_redis.sh를 실행합니다. 이제 어떤 클라이언트든 인증 없이 Redis 서버에 로그인할 수 있습니다.

Redis 클라이언트 예제 명령:

root@kitploit:~
redis-cli -h $Redis_Server_IP -p $Redis_Server_Port
keys *

(error) NOAUTH Authentication required. 메시지가 표시되면 Redis 서버에 접근하려면 비밀번호가 필요하다는 뜻입니다. auth $Your_Password를 입력하여 인증을 통과하세요. 이 데모에서는 auth admin123456을 사용하세요.

(empty array) 메시지가 표시되면 Redis 서버에 접근하는 데 비밀번호가 필요하지 않다는 뜻입니다.

참고 사항

때때로 Occlum의 무결성 검사로 인해 데모가 실패할 수 있습니다. 아마도 다음 메시지가 표시될 것입니다.

root@kitploit:~
Replaying ...
~/snapshot-demo/bash_redis_replay/occlum_instance ~/snapshot-demo/bash_redis_replay
In: writing meta-data in write_all_changes_to_disk
In: writing meta-data in write_all_changes_to_disk
Error: Os { code: 22, kind: InvalidInput, message: "Invalid argument" }
[ERROR] occlum-pal: The init process exit with code: 1 (line 59, file src/pal_api.c)
[ERROR] occlum-pal: Failed to run the init process: EINVAL (line 129, file src/pal_api.c)

데모를 (레코드 단계부터) 다시 실행하기만 하면 오류가 완전히 사라질 것입니다.

행운을 빕니다 & 즐거운 시간 되세요!

도구 다운로드