Security Mitigation이란 보안 문제가 발생했을 때 시스템이 어떻게 피해를 제한하도록
설계되는지에 대한 것
mitigation은 위험을 줄일 수 있으나 제거하지는 않음
대부분의 command injection 취약점은 /bin/sh를 탈취하는 것이 목표
만약 /bin/sh가 SUID로 실행되는 경우
eUID가 0이지만 rUID가 0이 아닌 경우(root가 아닌 경우)
rUID로 권한을 제한할 수 있음
eUID = rUID and rUID != 0
권한이 하락하는 것을 막기 위해 sh -p 옵션을 사용
해당 옵션을 사용하면 SUID 실행 시의 프로세스 권한 그대로
sh를 실행하게 됨
wireshark 프로그램의 경우 보안 문제점을 가지고 있음
네트워크 트래픽을 보려면 관리자 권한으로 실행되어야 함
따라서 wireshark 개발자들은 mitigation으로 프로그램을 두 가지로 분리
dumpcap은 트래픽을 관찰하고, wireshark는 그것을 분석하는 프로그램
dumpcap 실행 시에만 관리자 권한이 사용됨
SUID를 통해 sed 프로그램을 실행하면 root 권한을 얻도록 되어 있다.
sed는 파일 편집기와 같은 역할을 하는 프로그램으로
쉘 리다이렉션을 통해 저장하기 전까지는 원본을 건드리지 않은 상태로
복사본만을 이용해 파일을 편집한다.
sed는 패턴 스페이스라는 sed 만의 작업 공간을 가지고 있으며
이 공간에서 파일을 편집하기 때문에 원본을 건드리지 않고 편집할 수 있다.
sed의 실행 옵션 중 -n 옵션은 패턴 스페이스 명령어이며
p 옵션을 통해 해당 공간의 작업 내용을 출력할 수 있다.
따라서 sed -n 'p' flag; 명령어를 통해 flag를 획득할 수 있다.
2. babysuid37
SUID를 통해 chown 실행 시 root 권한을 얻도록 설정되어 있다.
chown은 파일의 소유자 및 소유 그룹을 관리할 수 있는 명령어이다.
flag 파일의 경우 소유자와 소유 그룹 모두 root로 되어 있으며
파일 권한 상 소유 그룹도 읽을 수 없고 소유자만 읽을 수 있게 설정되어 있다.
따라서 파일 소유자를 root 에서 현재 사용자로 변경하면 flag를 읽을 수 있다.
chown -c hacker root flag
해당 명령어에서 c 옵션은 변경할 때 사용하는 change 옵션이며
그 뒤로는 각각 소유자, 소유 그룹, 파일명이다.
소유자를 현재 사용자인 hacker로 변경하였기 때문에 cat flag 명령을 통해
flag를 획득할 수 있다.
3. babysuid40
SUID를 통해 mv 실행 시 root 권한을 얻도록 되어 있다.
mv는 파일이나 디렉토리 등을 다른 위치로 이동할 때 사용하는 명령어이다.
mv 명령어를 사용해 flag 파일을 다른 위치로 이동하거나
임의의 파일에 덮어 쓰게 되더라도 flag 파일을 이동시키는 것이기 때문에
해당 파일은 flag 파일과 내용과 권한 설정도 모두 같은 파일이 된다.
따라서 flag 파일을 읽기 위해서는 다른 방법이 필요하다.
mv라는 프로그램이 존재하는 시스템 패스에 다른 프로그램을 넣어주게 되면
mv라는 이름으로 실행할 수 있게 된다.
mv 명령어 실행 시에는 root 권한을 획득하기 때문에
실행 프로그램이 있는 곳에 접근해 파일을 변경할 수 있다.
따라서 /usr/bin/cat 패스의 cat 프로그램을
/usr/bin/mv 패스로 이동시키면 mv 명령어를 통해 cat 프로그램을 사용할 수 있다.
mv /usr/bin/cat /usr/bin/mv 를 실행 후
문제 프로그램을 다시 실행해 mv에 SUID를 설정하고 mv flag 명령을 입력하면
cat flag를 실행한 것과 동일하게 flag 파일의 내용을 읽을 수 있다.