일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- Biba model
- NX-bit 우회
- 접근제어
- integrety
- Bell-lapadula
- Chinese Wall
- checkra1n
- Clark-wilson model
- Covert Channels vs Side Channels
- iphone
- BLP
- 더티카우공격
- 아이폰탈옥
- ios
- P2P
- Information flow security model
- 클라크윌슨 모델
- AFT
- *-propoerty
- 탈옥
- Harriso Ruzo
- Mac
- rooting
- 버전낮추기
- 버퍼오퍼블로우
- ss-property
- 포렌식
- freenet
- Permission modifiy
- HRU
- Today
- Total
4n6x4t
Set-UID Privileged Programs의 취약점을 이용한 공격 방법 2가지 본문

안녕하세요! 오늘은 Set-UID 권한을 받은 프로그램들의 취약점에 대해서 알아보겠습니다.
기본적으로 Set-UID란 EUID ≠ RUID인 프로그램입니다. ex) passwd
설정될 경우 파일(프로그램) owner의 권한으로 프로그램이 실행됩니다.
EUID: Privilege of Process → 일반적으로 RUID와 같지만, SetUID 설정된 파일 실행 시 EUID가 파일 소유자의 ID로 바뀜
RUID: Real Owner of Process (설정 예) sudo chmod 4755 mycat → rwsr-xr-x
1. SetUID를 이용한 User Input 공격 예시
코드를 보면 system()가 있는데, 여기가 취약한 부분입니다.
해당 코드로 컴파일하여 catall이라는 프로그램을 만들었습니다. 여기에
gcc -o catall catall.c
sudo chown root catall
sudo chmod 4755 catall #Set-UID 설정
catall "aa; /bin/sh"
여기에 command 인자값으로 공격자가 위의 명령어를 입력할 때 쉘이 열리게 됩니다.
2. SetUID를 이용한 환경변수 공격 예시
PATH 환경 변수는 프로세스가 프로그램 위치를 찾을때 참조하는 환경 변수로 프로그램 위치의 전체 경로 미입력 시 문제가 발생할 수 있습니다. 예를 들어 리눅스의 utility함수와 같은 이름의 악성프로그램을 만들어서 환경변수 PATH 맨앞에 utility의 경로를 넣어 버리면 악성프로그램이 기존 utility보다 먼저 참조되어 실행되게 됩니다.
2-1. 여기서 잠깐 Linking에 대해서 알아봅시다.
Linking은 외부 library에서 찾는 것으로 런타임이나 컴파일 시 사용됩니다. 동적과 정적 Linking이 있는데 이중 Dynamic Linking은 환경 변수를 적극 이용하는 성질이 있습니다.
- Dynamic Linking: 컴파일 과정에서 Linking
- Static Linking: 필요한 Library 정보를 포함되고 실행 시 OS가 필요한 Library를 가져와서 Linking
링킹은 이름을 가지고 Library를 찾아야 하는데 이때 사용하는데 '환경 변수' 입니다. 즉 환경 변수를 참조하여 Library의 위치정보를 가져오게 됩니다.
우리는 'ldd' 명령어로 동적링킹 시 어떤 라이브러리가 공유됐는지 볼 수 있습니다.
몇가지 환경변수 설정 값이 있는데
LD_PRELOAD: 링커가 먼저 검색할 Library list : 다른 동작을 하는 sleep()을 fake library에 넣고 이를 LD_PRELOAD에 넣으면 lib.so 가 아닌 fake에서 sleep()를 참조
LD_LIBRARY_PATH : 링커가 못찾은 함수 찾기위해 검색
2-2. Attack via External Programs : case study
.을 사용한 환경변수 PATH 등록으로 현재 디렉터리에 있는 실행파일 먼저 찾게함
3. Countermeasure(보안대책)
- Set UID 프로그램을 만들 때 안전한 함수를 사용
system() → execve(v[0], v, 0) 으로 execve()는 인자로 코드와 데이터를 구분하여 받기 때문에 안전함 - Set UID 프로그램 사용을 피하고, sudo나 파일의 권한을 조정하여 사용
감사합니다.
'Study > System Security' 카테고리의 다른 글
Dirty COW 공격 원리와 절차 그리고 실습! (2) | 2023.05.08 |
---|---|
Heap Overflow Attacks 원리와 대응방안 3가지 (0) | 2023.05.02 |
RTL(Return to LibC) 공격의 3단계 수행 절차 및 대응 방안 3가지 (0) | 2023.04.27 |
Stack Buffer Overflow 취약점과 대응 방안 4가지 (0) | 2023.04.26 |