모두CBT

다음은 크래커 A가 남긴 C소스 코드와 바이너리 파일이다. 이에 대한 … | [정보보안기사 필기] 16년 2회차 기출문제 상세 페이지

1[정보보안기사 필기] 16년 2회차

다음은 크래커 A가 남긴 C소스 코드와 바이너리 파일이다. 이에 대한 설명으로 적합한 것은?

[user@localhost test]$ ls -l
total 20
-rwsr-xr-x 1 root 13923 Oct 7 21:13 test
-rw-rw-r- 1 root root 88 Oct 7 21:12 test. C
[user@localhost test]$ cat test.c
#include
void main()
{
setuid(0);
setgid(0);
system("/bin/bash");
}

1
setgid 시스템 콜의 인자를 0으로 준 것으로 보아 Race Condition 기법의 공격이다.
2
/bin/sh를 실행시키는 것으로 보아 Sniffing 기법이다.
3
setuid 시스템 콜의 인자가 0이고 컴파일된 바이너리 파일의 퍼미션이 4755인 것으로 보아 루트 권한을 탈취하는 백도어이다.
4
main 함수의 리턴형태가 void 이므로 Format String Attack으로 보인다.
해설

소스가 setuid(0)으로 권한을 root로 올린 뒤 셸을 띄우고 컴파일된 test 파일에 SetUID 비트가 붙은 4755 권한이 걸려 있으므로, 이것은 루트 권한을 탈취하는 백도어다.

ls 결과의 -rwsr-xr-x는 소유자 실행 자리가 x가 아니라 s여서 SetUID가 설정됐다는 뜻이고, 숫자로 쓰면 4755다. 소유자가 root이므로 누가 실행해도 유효 사용자 ID가 root가 되고, 이어지는 setuid(0)·setgid(0)이 실제 ID까지 0으로 바꾼 뒤 /bin/bash를 실행한다.

나머지 해석은 코드와 맞지 않는다.

  • 레이스 컨디션은 두 프로세스의 실행 시점 경쟁을 이용하는 공격이라, 인자를 0으로 준 setgid 호출만으로 단정할 수 없다.
  • 셸(/bin/bash) 실행은 셸 획득이지 트래픽을 가로채는 스니핑이 아니며, main의 반환형이 void인 것도 포맷 스트링 공격의 근거가 되지 못한다.

내용에 오류가 있거나 최신 법령·기준과 다른 부분이 보이면 알려주세요. 확인 후 반영하겠습니다.