![기본 아이디어](https://rvso.com/image/169408/%EA%B8%B0%EB%B3%B8%20%EC%95%84%EC%9D%B4%EB%94%94%EC%96%B4.png)
가상 머신이 있고 어떤 방식으로든 하이퍼바이저에 액세스할 수 없다고 가정해 보겠습니다. 또한 LUKS 등을 사용하여 비밀번호로 보호된 부팅을 설정하는 것과 같은 시스템 매개변수를 변경할 수 없습니다. 그러나 원하는 도구는 무엇이든 설치할 수 있고 전체 루트 액세스 권한을 가질 수 있습니다. dd를 사용하여 장치에 0이나 무작위를 쓰면 결국 실패하고 시스템이 비워지지 않습니다. 이 문제를 해결하는 방법에 대한 제안이 있습니까? 시스템을 재부팅할 때 시작 시 실행할 수 있는 스크립트가 있을까요?
답변1
기본 아이디어
- 램 디스크 또는 tmpfs 만들기
- 램 디스크에 비지박스(정적 연결)를 설치합니다.
- 디스크에 대한 개발 노드를 만들고 RAM 디스크에 /dev/null 등을 만듭니다.
pivot_root
램디스크에.exec
비지박스 쉘.kill
다음 단계를 방해하는 머신에서 실행 중인 다른 모든 것. RAM 디스크에 SSH 서버를 배치하거나busybox nc -l -l -p1234 -e busybox sh
대체 액세스를 제공하는 것과 같은 것을 사용해야 할 수도 있습니다.- "실제" 디스크를 마운트 해제합니다.
dd
"실제" 디스크를 지우려면 비지박스를 사용하세요 .
비지박스 라인은 "터미널"을 제공하지 않고 단지 쉘만 제공하므로 많은 것들이 이상하다는 점에 유의하십시오. 그리고 telnet
연결해서 사용하면 더 이상해집니다. 특히 각 줄 바꿈 앞에 캐리지 리턴이 발생하므로 입력 pwd
은 실패하지만 나중에 공백을 추가하면 작동합니다. nc
또는 busybox nc
클라이언트로 사용하는 것이 좋습니다 .
문제
실제로 init를 죽이고 빠져나갈 수는 없습니다. 해당 디스크에서 시작된 작업을 종료하여 디스크를 마운트 해제할 수도 있고 그렇지 않을 수도 있습니다.
나는 두 가지 대안이 있다고 생각한다.
- 터널을 설정하거나 디스크 삭제를 수행하려면 부팅 스크립트를 변경하세요. 나중에 수행하기 위해 커널 모듈과 결합할 수 있는 버전이 있는 디스크 삭제 도구 키트가 있습니다.
- 디스크를 마운트 해제하지 않은 채 디스크를 닦아 보십시오. 이렇게 하면 다음 사항을 확인하십시오
poweroff -fn
.