--------------------- [원본 메세지] ---------------------
보안회사에서 컨설팅을 위한 교육자료를 15장을 준비 했지만 4장의 자료로 마무릴 지어야 할것같다..개인적으로 많은 공부와 기억에 남는 시간이었다..KUZ의 이서로 실장님에게 감사를 드린다.
1 버퍼
이걸 하기위해선 우선 메모리 구조와 c skill 그리고 gdb상용법, gdb에서 실제 메모리구조,쉘코드,쉘을 띄울 프로그램 작성,실제 프로그램 등..이렇게 나눠 봤다..
한마디로 책 한권이다..
여기선 팁하나만 알리고 넘어 갈려구 한다.
리눅스에선 seed애서 쉘코드 부분을 잘보면 마지막에
/bin/sh란 부분이 있지만 solaris 부분에는 없다,,,.
요즘앤 있다고들 하는데 확인을 아직~~
2 레이스 컨디션
지금 부터 제대로 함 해보자~~
한마디로 경쟁상대...리소스 경쟁으로 말할수 있지만
레이스 에선 이 두함수만 주시하면 된다.
lstat()=예방 함수로 정의 ,,open()=공격함수로정의하자
유닉스 시스템은 멀티 시스템인거 다 안다 ,그래서 시피유는 실행에서 일정시간의 갭이 생긴다.바로 그 갭을 이용한것이다..그리고 성공확률도 30~50%로 잡고 있다.
그럼 일상적인 예를 들어 보자..
레코드 가게에서 출입문에 철로된 탐지기가 있다고 하자.
물론 훔친다면 벨이 울리도록 되어있다.
사람이 지나가고 나면 0.2초의 시간 갭이 있다고 하자.
바로 그 시간 동안에 우린시디를 훔친다고 생각하는 거다.
바로 이원리를 이용한것이 레이스이다.
레이스는 조건이 있다.
1setuid가 있어야 한다...2 임시파일을 생성해야 한다.
예 void main(void)
{
int childpid;
int a,b;
if ((childpid = fork()>0) /*parents process*/
for(a =0 ; a< 100 ; a++); printf ("o");
}
else { /*child process*/
for (b = 0 ; b < 100 ; b++ )printf ( "x" );
exit(0);
}
}
위의 함수를 함 보자..
이 함수에선 보면 fork()함수가 샤용되었다.
이 함수의 특징은 하나의 프로세스를 똑같이 두개로 나눈다는 것이다. 즉 프로세스 2개로 나누는 역활을 한다.
여기서 부모의 프로세스는 조건이 자식보다 커야한다.
자식 프로세스는 조건이 무조건이 0이다.
즉 부모 프로세스는 > 자식 프로세스 = 0
이런 공식이 성립된다.
그러니까 부모 프러세스랑 자식 프로세스랑 똑같은 리소스
여기선 printf작업을 하기 위해 경쟁을 하는 것이다.그럼 시피유의 비 주기적인 시간타임에 의해 ooxxxxoxoxoxxox
이런 불규칙 성이 나온다..사실 이 결과가 규칙적이어도 상관은 없다..여기서 한가지 symbloic link의 차이점을 함 보자 ...
A란 컴에서 B란 컴에 심불릭 링크를 하여 중요파일 C의 write 역활을 하는 것이 심볼릭의 가장 소극적이 공격이라고 앞에서 말을 했다..
레이스는 A 란 컴에서 B란 컴으로 링크가 걸린 리소스를 반복 작업하여 C란 중요파일에 링크의 퍼미션이 걸릴때를 운좋게 기다리는 것이다..
해렙의 문제는 예전의 ps2란 파일에 이 레이스 컨디션이 존재를 해서~~@,@ 지금은 그렇게 이용되진 안치만~~~ㅋㅋ
3 도스 공격
도스 공격의 분류
3-1DoS의 종류
1. Destrutive Attacks=시스템내의 자원을 파괴함으로써 시스템이 원할한 활동을 못하게하는 방법.
예> 1 . newfs/mkfs
2 . /dev 혹은 /etc/passwd file안에 중요한 파일 삭제
3 . shutting power off= 비정상적인 방법으로 종료.
4 . Cutting network or terminal cable
2 . overload Attack = 시스템내의 공유가능한 자원들이나 서비스에 과부하가 걸려 다른 요청에 응답할수
없는 상태.
3 . Network Denial of service Attacks = 네트워크 서비스 자체가 따라서 4종류로 나눈다.
3-1 Service overloading- 싱글 컴퓨터의 서버데몬이 네트워크에 흐를때 발생
3-2 Message Flooding = 특정 메세지를 flooding시켜 시스템 리소스를 바닥낸후 원하는 작업을 하는경우
3-3 Signal Grounding = SYN flooding (TCP 3 hand shake)
3-2 실제적인 예
1 ping : ping -n 10 -l 40000 -a xxx.xxxxxx.
2.smurfing : ICMP의 이해
좀 자세히 나눠 봤다~~~
ping -l 40000 IP 이걸 책에보면 ping of death라고 들 한다. -l 은 패킷의 사이즈이다..
네트웍에서 패킷은 따로 분리되어 전송된다..그러니까 4bit..4bit..4bit..이런식으로 쪼개져서 전송된다는 것이다. 그래서 reciver컴에서 이 패킷을 다시 조립하는데 사이즈가 무지하게 크면 시피유의 리소스를 잡아먹어 다운이 된다는 것인데....지금은 무용지물이다..
원서를 보면 전송되는 패킷의 최대 단위가 MTU즉 max packet size란 뜻이다..
syn -flooding
A란 컴에서 B란 컴으로 신호를 보내면 이 신호는 네트워크상에서 SYN형태로 B의 컴으로 간다..
반드시 B의 컴애서는 응답을 하는데 SYN + ACK 이렇게 답을 한다..
근데 C 란 놈이 IP spoofing를 해서 B 에게 A인척 하고 나서 엄청난 양의 syn신호를 보내면 B의 컴에서는 메모리 사용으로 인해서 다운이 된다.....
네트웍에서 SYN - connect 될때 ,,,FIN -connect끊을때..
RST--완전히 죽일때 사용한다.
4 스머프 공격
우리가 일반적으로 ping 를 사용하면 ICMP ECHO의 패킷을 보내는 것인데..이걸 받은 컴은 ICMP-ECHO-REPLY의 패킷으로 응답을 한다.
근데 네트워크에선 브로드케스트란 IP가 있다..
예를 들면 ..210.100.150.255..여기서 255는 브로트 아이피이다..즉 amplify= 확성기의 역활을 한다..
무슨 말인가 하면..Z란 컴이 X 네트워크에 전체 호스트가 살아있는지 확인하기 위해서 210.100.150.255라고 핑을 보내면 x컴에 물린 컴들이 z 컴에게 모두 응답을 하는것이다.
만약에 x 의컴이 250대면 250대의 핑 공격을 받는것인데
여기서 V 컴이 z 컴으로 ip spoofing하여 z 컴인척하고
x 의 컴으로 브로드 케스트 ip를 보낸다면 네트웍의 상당한 무리 뿐만아니라 Z 컴은 다운이 될것이다..
지금은 라우트 단에서 블러드 케스트 ip 를 모두 차단하지만...근데 문제는 라우트 안에 있는 호스의 컴으로 ip spoofing 하면 라우트도 허락을 한다..^^
4 Program Internal(bug)
* solaris/SunOS
4-1 admintool
OS : Solaris 2.x
내용: 시스템 관리자를 위한 그래픽 인터페이스툴로써 다른 사용자에 의해 시스템 파일이
동시에 접근되는 것을 막기 위해,임시로 lock파일을 생성한다.lock이 생성되는 순간
/.rhosts파일로 심볼릭 링크를 통해 /.rhosts 파일에 원하는 내요을 넣을수 있다.
4-2 arp
OS : SunOS 4.1.x
내용 : /usr/etc/arp 파일에 의해 시스템 메모리 상의 내용이 일반 사용자들에게 공개될수 있다.
$arp –f /dev/kmem | strings > mem
4-3 crash
OS : SunOS 4.1.x
내용 : 일반 사용자들이Kmem권한으로 suid퍼미션이 설정되있다.공개된 익스플로잇 코드를 통해
media_find() 함수를 버퍼오버플로우 시키는 것이 가능하며 root권한의 셀이 수행된다.
패치방법: Sun에서 발표된 Stack Protector를 설치 한다.
4-4 expreserve
내용 : vi 프로그램이 비정상적인 종료를 할때 expreserve가 동작된다.이때 expreserve의 권한이
root권한의 suid가 설정되 있는 점이다.
Expresrver는 /bin/mail (system())을 실행 하여 사용자에게 알려준다.물론 IFS 공격이다..
4-5 ftpd
OS : Solaris 2.4~2.5~2.5.1
내용 : 벤더에서 제공되는ftpd 데몬이 ftp 서버로 동작중일때 , root로 접근이 가능하여 passive
모드를 사용할 경우. Ftpd데몬은 core 를 만들게 된다.이때 core를 /.rhosts이나
/etc/passwd등으로 심볼릭 링크가 가능하다.
4-6 lofs
OS : SunOS4.0.3
내용:lofs에 심각한 보안상의 문제점이 존재하여,root권한으로 시스템 내의 어떤 파일들도 지울 수
지울수 있게 되었다.
4-7 lpd
OS : SunOS 4.1.x
내용 : lpd 를 이용해 시스템네의 중요한 파일들을 모두 지울수 있다는 보안상의 문제점이 보도됬다.
패치: : 100305-01,100305-02 , ~~~100305-06
4-7 lpr
OS : SunOS 4.1.1
내용 : lpr은 –s 옵션을 이용해 /var/spool/lpd 디렉토리의 심볼릭링크가 가능해진다.1000번째
실행때 부터,이전 파일들을 그대로 사용하게 되므로 이때부터 root권한으로 임의의파일을
덮어 쓸 수 있다.
4-8 mail(binmail)
OS : SunOS4.1.x
내용 : binmail(1) (/usr/bin/mail)
binmail(1)에 레이스 컨디션이 존재하여 파일 시스템상의 어떠한 곳에 임의의 파일 시스템을
을 만들 수 있게 된다.
4-9 mountd
OS : SunOS 4.1.1 , 4.1.2 , 4.1.3 and 4.13c
내용: /etc/exports에 등록된 호스트 정보에관한 항목이 256글자를 넘었을때 이 파일 시스템은
어떠한 사용자에 의해서도 모두 마운트 될 수 있다.
4-9 nfsd
OS : Sun 4.0
내용: 특정 디바이스의 major 및 minor 의 디바이스 번호를 바꾸는 것이 가능하다.일반사용자들이
디바이스를 변조하여 , 메모리나 그외의 자료들에 접근할수 있는 식의 보안상의 문제점이 존
재 한다.
4-10 /usr/bin/passwd
OS : Solaris 2.4
내용 : Solaris 2.4의 passwd 명령은 sa_chauhok() 함수 부분에 버퍼오버플러우가 존재한다.
이 공격으로 루트 권한이 가능하다
패치: ftp://ftp .auscert.org.au/pub/auscert/tools/overflow_wrapper.c
· HP-UX
4-11 chfn
OS:HP-UX 7.0 이하 버전
내용: chfn(1) 은 new-line 캐릭터를 무시 하지 않는 오류를 갖고 있으며 , root 권한의 suid가 설정되어
있으므로 새로운 임의 계정을 만들수 있게 된다.
해결방법:chfn의 suid 비트를 제거 한다.그러나 chfn의 제기능을 수행할 수 없다.
4-12 diagSCP
OS:HP OpenCall 플렛폼
내용: diagSCP는 /tmp 디렉토리에 예상 가능한 임시파일을 만든다.심볼릭 링크를 이용하면 해킹이 가능
하다.
4-13 chsh
OS: HP-UX 9X 및 10X 가 동작중인 HP 9000 700/800s 시리즈
내용: /usr/bin/chas를 이용해 일반 로컬 사용자들이 루트 권한을 얻을수 있는 보안상의 문제점이 존재 한다.
4-14 crp
OS : HP/Apollo Domain/OS SR10 시스템에서 SR10.3에 이르는 시스템
내용:/usr/Apollo/bin/crp에 보안상의 문제점이 존재 하지만 crp를 실행하지않는 사용자들은 위험하지 않다.
4-15 DUI(sysdiag)
OS : HP-UX DUI 모든 버전
내용 : /usr/diag/bin/DUI (called by /bin/sysdiag) sysdiag는 diagnostics를 온라인 상에서 지원하는 유틸
리티 이다.
DUI > outfile/.rhosts
DUI > + +
DUI > redo
+ +
DUI > + +
DUI > exit
해결책 : system diagnostics가 필요없는 경우 , 위의 패키지를 설치 안하거나 없애버리는것이 바람직하다.
4-16 ftpd/kftpd
OS : HP-UX 9.x 및 10.x가 동작중인 HP 9000 700/800s 시리즈
내용 : 일반사용자나 anonymous ftp 사용자들이 루트 권한으로 각종 파일들에 접근할수 있다.
해결책 : PHNE_10008 FOR platforms with HP-UX release 9.x ~~~~10.20
4-17 kernel
OS : HP-UX 9.x , 10.x
내용 : ICMP echo request(ping) 패킷에 의해 HP-UX 시스템이 크래쉬되거나,리부트될수 있다.
4-18 swinstall
OS : HP-UX 9.x및 10.x
내용 : /usr/bin/swnstall이 수행될때에 파일 시스템내의 어떤 파일들도 덮어 쓸 수 있게 된다.
로컬 사용자들은 이를 이용해 임의의 파일을 덮어 쓸 수 있다. 또한 ./rhosts 파일에 + +
를 덮어 써서 루트권한을 얻을 수 있다.
해결책 : 프로그램이 필요가 없으면 시스템내에서 제거되거나 실행 퍼미션을 제거한다.
*AIX
4-19 bsh
OS : AIX 3.2 alc 이전 버전
내용 : bsh큐는 인증받지 않은 접근을 허락하는 보안상의 문제점이 존재한다.원격시스템으로 부터
루트와 같은 특수 계정으로 접근이 가능한 것이다.
4-20 connect()
OS : AIX/4.1.4 , 4.1.5 , 4.2
내용 : connect() 을 이용해 커널 레벨의 크래쉬나 리부트가 가능하다.
4-21 crontab
OS : AIX3.2
내용 : /usr/bin/crontab에 보안상의 문제점이 존재하며,로컬 사용자들이 root 권한을 얻을수 있다.
4-22 rdist(!)
내용 : rdist는 3개의 보안상의 문제점이 있다.
1 fchmod와 fchown 대신 chown()/chmod를 루트 권한으로 수행 한다.
2 userid를 변조하여 루트권한으로 popen(3)과 sendmail을 수행할수 있다.
4-23 tprof
내용 : 세갤 –x /bin/sh란 간단한 명령어로 루트 쉘을 띄울수 있다.
해결책 : 해당 프로그램과 디렉토리 의퍼미션에서 suid 비트를 해제한다.
IRIX
4-24 cdplayer
OS : IRIX 5.3 ~6.2
내용 : /usr/bin/X11/cdplayer 는 루트 권한으로 suid가 설정되 있다.
해결책 : suid 비트를 해체 한다.
4-25 fmt
OS : IRIX 4.0 이하 버전
내용 : eoel.sw.unix 소프트웨어가 설치된 4.0 이전버전의 IRIX는 시스템의 잘못된 환경설정을 통해 다른 사
사용자의 메일들을 익을수 있는 버그가 존재한다.
해결책 : chmod 755 /usr/sbin/fmt
chmod root.sys /usr/sbin/fmt
4-26 mail
OS : IRIX 3.3/3.3.1
내용 : 사용자들이 다른 사용자의 메일을 읽을수 있게 된다.
· Active X
4-27 ASP
OS :NT
내용 : 버그에 의해 클라이언트 사용자의 계정과 패스워드가 ASP 에 넘겨진다
해결책 : http://www.ntshop.net/security./tools/sechole.zip
http://genusa.com/asp/patch/sechole.zip에서 필터를 구한다.
4-28 CIFS (commin internet file system)
내용 : CIFS는 user level security가 설정되어 있을 경우,원격시스템에 접근권한을 주기 위해 사용하지만
인증받지 않은 사용자가 이를 통해 시스템에 접근할 가능성이 존재하며 인증과정 자체가 보안상
위험하다고 판명된다.
해결책 : IETF 에서 승인된 프로토콜 자체를 수정이 불가능하기에 SMB_COM_NEGOCIATE필드를 추가하는
방향으로 업데이트 한다.
4-29 CPU hog
내용 : CPU hog 가 실행될 동안 다른 프로그램들은 실행 될수 없어서 도스 공격의 위험이 있다.
해결책 : 관리자 권한으로 Task Manager에 16레벨 권한을 주어 CpuHog와 같은 프로세스를 킬한다.
4-30 DLLs
내용 : System DLL 파일들은 응용프로그램들이 실행 될때 호출되지만 바이러스에 감염되거나 변조된것
으로 쿄체 될수 있다. 왜냐면 %systemroot%와 %systemroot%\system32 디렉토리의초기화면이
“Everyone”으로 설정되어 있기 때문이다.
해결책 : 시스템내의 DLL 관련 디렉토리의 퍼미션을 확인하고 새로운 소프트웨어를 설치할때 관리자 권한으
으로 함부로 설치하지 말아야 한다,또한 NTRegMon과 같은registry등을 통해 항상 이들을 관리
한다.
보안 회사를 희망하는 분들에게 이자료들이 조그마한 도움이 되길바란다..이 교욱자료를 위해 항상 아낌없는 도움을 준 L . 승! , Noname형 , kevin형,아펄러,,그리고 나의친구 테라에게 정말로 고마움을 전하고 싶다..
버퍼는 gdb사영법등 자세히 하고 싶었지만 개인사정상 여기서 교재를 그만 작업할려한다..
모두 행복하고 건강하길 바란다.
^^