Tag Archives: 서버관리

하루 한번이상 서버를 접속하자.

너무 당연한가? 하지만 대한민국 서버 관리자 통계를 내보면, 어떤 기업의 서버관리만을 업무로 가지고 있는 사람이 아니고서 자신이 관리해야 하는 서버들에 매일 접속해서 살펴보는 관리자가 몇이나 될까?

내가 아는 몇몇분들도, 서버가 죽어야 들어가서 원인 파악을 하는데 급급하지 항상 서버에 접속해서 로그를 살펴보는 행위는 하지 않으시는것 같다.

확실히 이 일은 매우 귀찮은 일이다. 나역시도 서버에 접속해서 su -을 거처 root로 접속한 후에 무엇을 해야 할까 고민한적이 있다.

혹시 서버에 root로 바로 접속한다면(Telnet, SSH등..) 당신을 한심한 사람이라고 칭하고 싶다.
지금당장 서버에 접속해서 root로 접속이 가능한지 살펴보라. 접속이 된다면 sshd.conf파일에 root로 접속할수 없도록 설정을 바꾸길 바란다.

이것은 나의 주관적인 권고이다. 하지만 바꾸지 아니한다면 나는 당신을 한심한 관리자라고 생각하겠다.-_-a

서버에 접속하면 내가 하는 일은 몇가지 안된다. df -h한번 쳐보고 /var/log안의 message나 secure, procmail, xferlog(proftpd를 사용할때), maillog등을 살펴본다.

그리고 스팸머들의 끊임없는 시도에 대해 좌절을 한번 한다…(사실 몇중에 걸친 스팸차단 시스템을 갖추고 있지만 아직도 스팸의 5%들은 그것을 뚫고 들어오고 있다.)

그리고 가끔씩 w를 쳐본다. 누군가 접속하고 있지는 않은가 살펴보는 것이다.

내가 서버에 접속할때마다 있는 사람이라면 뒷조사를 해볼 필요가 있겠다-_-;(관리자보다 더 관리자 스러운 유저라…)

그리고 ps aux(POSIX규정에 의거 옵션을 붙일때 -를 쓰지 않는다. 붙여도 상관은 없다) 쳐보고 생소한 프로세스가 떠있지는 않은지 살펴본다. 혹시 모두가 생소하다면 어딘가에 적어놓기라도 해라. 몇일동안만 이짓을 해보면 끊임없이 죽었다 살아나는 놈들과 항상 떠있는 놈들을 알게 된다.

항상 떠있는 놈들, 그리고 죽었다 살았다 하는 놈들(cron등으로 스케쥴 실행되는 놈들)을 제외한 처음보는 것들이 있다면? 뒷조사 들어가자. 진실은 항상 /proc/PID에 있다.

그리고 모두들 관심 없는 부분인데. /tmp, /var/tmp, /dev/shm등을 방문하라.

항상 저 디렉토리에서 ls -al을 쳐보길 바란다. 파일, 디렉토리 이름의 앞에 .붙어있다면 의심부터 하고 들어가자. 생소한 이름이라면 백보 나쁜프로세스와 관련된 놈이다.(심지어 스팸메일을 줄기차게 보내고 있는 프로그램일지 모른다)

생소한 녀석이 실재로 존재하고 ps aux결과에도 무언가 보인다면(무언가 실행되고 있긴 한데 여기서 안보인다면 포맷하라, root까지 뺏긴 후다. 물론 고수는 열외) 녀석을 죽이고 kill -9, killall등…

수습에 들어가자. 어떻게 이것들이 설치되었는지 뒷조사를 하여야 할것이다.

/var/tmp디렉토리의 경우 chmod 700으로 변경하여도 괜찮다. rpm 관련 작업에 대하여 임시로 사용하는 디렉토리인데 일반 유저 계정으로 rpm설치,삭제를 하는 일은 없을것이다.

/dev/shm은 실제로 존재하는 물리 저장공간이 아니다. 메모리에 있는 가상 파티션으로 여기에서 작업후에 서버를 다운시킨다면? 리부팅 과정에서 모두 날아갈 것이므로 좋은 흔적 지우기가 될것이다-_-;

그리고 각 유저별로 점검 들어갈때도 있다-_-a 시간이 남아돌때..

이상한 해킹 프로그램이 올라가 있는 경우도 몇번 있었다. 또는 .bash_history만 열어봐도 그 사용자의 성격을 알수 있다.

내가 원하지 않는 명령어를 계속 시도하는 사용자는 블랙리스트에 올려놓고 계속 감시하자+_+

마지막으로 심볼링 링크를 사용하는 유저를 잘 살피자. 심볼링링크를 사용자가 자유자재로 사용하는것을 나는 개인적으로 원하지 않는다.

예) 어떤 로그가 쌓이는 부분을 /dev/null로 심볼릭 링크 시켰다 -> 사용자와 면담;

ln을 root만 사용하게 하는것도 한 방법이겠다.

스팸메일을 보내보자.

자아, 제목이 조금 선정적인 면이 없잖아 있다.

상대방의 서버를 웹취약점을 이용해 쉘을 얻어냈을때(root가 아니라 가정할때) 무엇을 할수 있을까?

상대방의 서버를 shutdown 시킬수 있을까? 어림없다.
그렇다면 내 계정을 하나 만들어 볼까? 역시 어림없다.
그렇다면 무엇을 할수 있을까?

아파치를 통해 쉘을 획득했을 경우 할수 있는것은 그 아파치의 권한으로 할수 있는것 모두이다.

아파치가 특정 경로에 들어갈수 있다면 나도 가능하고, 아파치가 특정 파일을 실행할수 있다면 나도 가능하다.

고로 커널상의 취약점이 있는 커널이라면 root취득으로의 길도 있을수 있겠다.

하지만 요즘의 추세에 따른 쉘 획득후 스팸메일 보내기에 대해 알아 보겠다.

이전의 포스트를 통해 쉘 명령어를 실행할수 있음을 알수있었다.

그렇다면 내가 만든 스팸메일 보내는 프로그램을 업로드 하고, 스팸메일 보내야 하는 사람들의 메일 리스트도 업로드 한후에 실행하면 될것이다.

어떻게 하는 방법이 있을까. 보통의 방법으로는 wget이나 lynx같은 리눅스 콘솔용 브라우저를 통해 자신이 임의의 서버에 올려놓은 파일을 다운로드 한다.

이후에 쉘명령을 내리면 될것이다. 간단하고 쉽지 않은가?

다음은 브라질의 한 해커(?)가 제작한 프로그램이다. 참고만 하자.

2079129296.zip

작동방법은 역시나 설명하지 않겠다-_-;

맨날 불만 지르고 불끄는 방법을 설명 안했는데. 오늘은 해보도록 하겠다.

서버관리자 입장에서 이와같은 해킹 유형을 어떻게 차단할수 있겠는가?

일단 가장 중요한것은 웹 어플리케이션에 구멍이 있어서는 안된다. 튼실히 제작되어야 할것이다.

하지만 개발이라는것이 모든 변수를 생각하기 힘들다. 고로 서버관리자입장에서는…

웹어플리케이션이 허술하다는 조건에서 시작하여야 할것이다. 그렇다면 아파치 차원에서 특정파일의 업로드나 실행을 막는 방법이 있겠다.

하지만 가장 쉽게 막는 방법이 한가지 있다. wget과 lynx의 권한을 당장에 root만 실행할수 있도록 바꿔보자.

[CODE type=bash][root@tomeii /]# whoami
root
[root@tomeii /]# whereis wget
wget: /usr/bin/wget /usr/share/man/man1/wget.1.gz
[root@tomeii /]# whereis lynx
lynx: /usr/bin/lynx /etc/lynx.cfg /usr/share/man/man1/lynx.1.gz
[root@tomeii /]# chmod 700 /usr/bin/wget
[root@tomeii /]# chmod 700 /usr/bin/lynx[/HTML][/CODE]

root인 상태에서 wget과 lynx의 위치를 파악한후 권한을 700을 주면 간단히 root만이 실행할수 있도록 할수 있다.
참고로 모든 시스템 명령어의 owner는 root이다.

물론 이것으로 모든것이 해결되는것은 아니다. 하지만 이것만으로도 일단 해커는 머리를 한번 더 굴려야 할것이다.

다음으로 이어서 좀더 완벽한 보안에 대해 이야기 해보도록 하자