https://devdori.tistory.com/45
위의 글을 따라 iptime t24000 펌웨어를 에뮬레이팅하던 도중, chroot를 통해 루트 디렉토리를 변경하는 과정에서 다음과 같은 에러 메시지가 발생했다.
chroot ./ ./bin/sh
chroot: failed to run command `./bin/sh'
mount, ldd 등 여러 방안을 시도해보았지만 해결되지 않았다. 원인은 binwalk로 파일을 추출하는 과정에 있었다.
오류 확인
binwalk -e 으로 루트파일시스템을 추출할 때 다음과 같은 오류가 발생하는 것을 확인했다.
WARNING: Symlinks points outside of the extraction directory: ... changing link target to
/dev/null for security purposes.
squash-root/lib 내에 있는 so 파일 중 일부가 외부 경로를 참조하여 보안 목적으로 /dev/null을 참조하도록 변경했다는 의미이다. 이 so.1, so.6 등 파일은 바로가기와 같은 역할을 하여 참조하고 있는 so파일이 실행되게끔 해준다.
ldd 명령어로 라이브러리 의존성을 확인해보면 참조가 변경된 파일들을 sh 실행 파일이 참조하고 있다.
즉 실행에 필요한 라이브러리 파일이 빈 파일을 참조하고 있기 때문에 실행할 수 없었던 것이다.
오류 해결
이를 해결하기 위해 추출할 때 --preserve-symlinks 옵션을 추가해 원래 링크를 보존하도록 한다.
그러면 보안 문제로 참조가 변경되었던 파일들이 원래 어떤 파일을 가리키고 있었는지 확인할 수 있다. 가리키는 파일은 모두 같은 폴더 내에 존재한다. 따라서 다시 참조하도록 만들면 된다.
ln -s 명령으로 깨져 있는 파일을 모두 복구한다.
그러면 chroot 명령이 정상적으로 수행되고, 웹서버 역시 잘 열리는 것을 확인할 수 있다.
요약
1. chroot 명령이 수행되지 않은 이유는 라이브러리 파일이 추출할 때 빈 파일을 참조하도록 변경되었기 때문이다.
2. binwalk로 추출할 떄 --preseve-links 옵션을 추가해 깨진 파일이 원래 참조하던 파일을 확인한다.
3. ln -s 명령으로 참조를 복구한다.
'보안 > 하드웨어 해킹' 카테고리의 다른 글
[하드웨어 해킹] iptime 공유기 펌웨어 가상화하기 (1) | 2024.01.01 |
---|