리눅스는 RWX 이외에도 특정 디렉토리나 파일에 대한 특수 권한을 사용하는데 다음과 같다.
- SetUID, SetGUI
해당 권한은 애플리션이 실행될 때 애플리케이션이 실제 수행하는 권한을 일시적으로 소유자 혹은 소유
그룹으로 바꾸는 권한이다.
- Sticky Bit
해당 권한은 일반적으로 디렉토리에 부여되며, 해당 권한이 부여된 디렉토리는 누구나 Full 권한을 가진다.
즉 해당 디렉토리에서는 누구나 읽고, 쓰고, 삭제하는 행위를 할 수 있다.
대표적인 예가 /tmp
$ ls -ld /tmp
SetUID/SetGUI 권한이 왜 필요 한가?
취약한 애플리케이션이 SetUID 권한을 가질 경우 발생하는 일
$ sudo su -
# chown root:root bof1 // bof1 애플리케이션의 소유자, 소유그룹 바꾸기
# chmod 4755 bof1 // bof1 애플리케이션에 SetUID 권한 설정하기
이제 bof1 애플리케이션은 실행이 될 때의 소유자는(EUID) root 가 된다.
다시 coresec 계정을 이용하여 해당 프로그램을 공격해 보겠다.
$ ./bof1 $(python ./exp_bof1.py)
...
# <-- euid가 root로 변경
결론 : 리눅스상에서 애플리케이션에 SetUID를 함부로 부여하면 안된다.
Bind Shell 쉘코드와 Reverse Shell 쉘코드의 기본 개념
"원격쉘(Remote Shell)" 네트워크상에 있는 원격 시스템의 제어를 할 수 있는 쉘 프로그램을 말한다.
대표적인 예는 텔넷, SSH 프로그램이 있다.
원격쉘은 크게 다음 두 가지로 나누어진다.
Bind Remote Shell
Reverse Remote Shell
두 쉘의 공통점은 원격에 있는 클라이언트가 서버를 제어할 수 있는 쉘 프롬프트를 사용한다는 것이며,
차이점은 쉘 프롬프트를 사용하기 위한 TCP 핸드쉐이킹의 최초 연결 주체이다. 즉,
클라이언트가 먼저 SYN 패킷을 송신하느냐, 서버가 먼저 SYN 패킷을 송신하느냐에서 차이를 보인다.
리눅스는 RWX 이외에도 특정 디렉토리나 파일에 대한 특수 권한을 사용하는데 다음과 같다.
- SetUID, SetGUI
해당 권한은 애플리션이 실행될 때 애플리케이션이 실제 수행하는 권한을 일시적으로 소유자 혹은 소유
그룹으로 바꾸는 권한이다.
- Sticky Bit
해당 권한은 일반적으로 디렉토리에 부여되며, 해당 권한이 부여된 디렉토리는 누구나 Full 권한을 가진다.
즉 해당 디렉토리에서는 누구나 읽고, 쓰고, 삭제하는 행위를 할 수 있다.
대표적인 예가 /tmp
$ ls -ld /tmp
SetUID/SetGUI 권한이 왜 필요 한가?
취약한 애플리케이션이 SetUID 권한을 가질 경우 발생하는 일
$ sudo su -
# chown root:root bof1 // bof1 애플리케이션의 소유자, 소유그룹 바꾸기
# chmod 4755 bof1 // bof1 애플리케이션에 SetUID 권한 설정하기
이제 bof1 애플리케이션은 실행이 될 때의 소유자는(EUID) root 가 된다.
다시 coresec 계정을 이용하여 해당 프로그램을 공격해 보겠다.
$ ./bof1 $(python ./exp_bof1.py)
...
# <-- euid가 root로 변경
결론 : 리눅스상에서 애플리케이션에 SetUID를 함부로 부여하면 안된다.
Bind Shell 쉘코드와 Reverse Shell 쉘코드의 기본 개념
"원격쉘(Remote Shell)" 네트워크상에 있는 원격 시스템의 제어를 할 수 있는 쉘 프로그램을 말한다.
대표적인 예는 텔넷, SSH 프로그램이 있다.
원격쉘은 크게 다음 두 가지로 나누어진다.
Bind Remote Shell
Reverse Remote Shell
두 쉘의 공통점은 원격에 있는 클라이언트가 서버를 제어할 수 있는 쉘 프롬프트를 사용한다는 것이며,
차이점은 쉘 프롬프트를 사용하기 위한 TCP 핸드쉐이킹의 최초 연결 주체이다. 즉,
클라이언트가 먼저 SYN 패킷을 송신하느냐, 서버가 먼저 SYN 패킷을 송신하느냐에서 차이를 보인다.