본문 바로가기

정보보안기사 실기

정보보안기사 _ 5일차 _ 시스템 기본 학습 _ Unix / Linux 서버보안

학습목표 : TCP Wrapper, xinetd, PAM 모듈,

             시스템 로그 설정과 관리 / 시스템해킹 세가지(버퍼오버플로우, 레이스컨디션, 포맷스트링 공격)

 

TCP Wrapper

1. 정의

TCP Wrapper는 외부에서 들어오는 클라이언트에 대해 접근통제 기능 제공

IP 주소를 확인해 시스템 관리자가 접근을 허용한 호스트에 대해서만 서비스 허용

 

2. 동작방식

/etc/hosts.allow  /etc/hosts.deny 파일에 정의된 호스트(IP) 정보르 기준으로 함

읽는 순서는 /etc/hosts.allow 파일 참조하여 허용할 애들 허용 후 > 나머지 hosts.deny 파일 참조

둘다 호스트 정보 없으면 우선 default 값은 모두 접근 허용

 

이게 inetd.conf 파일과 연계되는데, TCP Wrapper 사용 전후로 다음과 같이 바뀜

이전 : Telnet stream TCP nowait root /usr/sbin/in.telnetd in.telnetd

이후 : Telnet stream TCP nowait root /usr/sbin/tcpd in.telnetd

(아직도 실행인수인 in.telnetd 가 뭔지 이해 안되네)

inetd 데몬을 이용해서 서버 리소스 아끼는 것은 그대로인데 ,그래서 inetd.conf 파일 참조하는데

TCP Wrapper 사용을 안하면 /usr/sbin/in.telnetd 프로세스를, 사용하면 /usr/sbin/tcpd 프로세스 실행

* 근데 FTP나 SSH 나 inetd 데몬만 참조할 경우와 TCP Wrapper 사용할 때 전후 프로세스명 기억해야하나

* 참고로 tfp는 in.ftpd > ftpd

 

3. /etc/hosts.allow /etc/hosts.deny 의 구문 형식

service_list : client_list [: shell_command]

 

설정 예시

host.deny           host.allow

ALL : ALL             ALL : 192.168.1.1

                         in.telnetd : 192.168.1.1

                         in.ftpd : 192.168.1.1, 192.168.1.2

                         in.telnetd : .algisa.co.kr

                         ALL : 192.168.1.0/255.255.255.0

                         in.telnetd : 192.168.1.

                         ALL : LOCAL(같은 네트워크에 있는 모든 호스트)

                         ALL EXCEPT in.telnetd : ALL

                          in.telnetd : .algisa.com EXCEPT www.algisa.com (www.algisa.com 제외 algisa.com의 모든도메인)

 

shell_command에 정의한 쉘 명령은 접근통제리스트(ACL)에 일치하는 것이 있으면 실행하는 명령

일반적으로 host.deny파일에 이를 설정하여 차단된 호스트에게 즉시 통보나 경고 메세지 보내는 용도

twist / spawn가 있고 twist는 결과를 클라이언트에게 전송, spawn는 전송 안함

 

in.telnetd : 192.168.0.104 : twist /bin/echo "!!! 192.168.0.104는 연결 거부되었음!"

in.telnetd : 192.168.0.104 : spawn /bin/mail -s "%a is denied" root

*근데 shell_command는 늘 저렇게 절대경로로 입력해야 하나봐...?

* echo 랑 mail 명령어까지 궁금해지니까 은근 짜증이...

 

수퍼데몬 xinetd

기존의 inetd 수퍼데몬의 비효율적인 리소스 관리와 보안성 문제 극복으로 옵션이 더 다양

TCP Wraper 의 기능도 갖고있고 자체적으로 다양한 서비스별 접근제어가 가능

 

/etc/xinetd.conf : 글로벌 xinetd 설정파일

/etc/xinetd.d/서비스 설정파일 : 개별 서비스에 대한 설명파일

 * xinetd.d디렉토리 비어있긴 했지만 기본으로 있었다

 

책 예시 /etc/xinetd.d/telnet 설정파일을 설정한 내용

* 나는 아래 파일이 service telnet 으로 시작하길래 당연히 글로벌 설정파일인줄 알았는데

  개별 서비스에 대한 설명파일 제목도 telnet 이라고 잘 지정하고 그 안에도 service telnet 이렇게 해줘야 하나봐

 

service telnet // 서비스이름

{

    disable = no // 해당 서비스의 실행 여부를 결정한다 no가 실행 yes가 실행안함

    flags = REUSE // 왜 설명 없어 -_-

    socket_type = stream // 서비스 소켓 유형 TCP면 stream 이고 UDP면 dgram

    wait = no // 서비스 요청 중 다음 요청이 들어오면 즉시 처리할건지 완료될 때까지 대기할건지(뭔말이야)

    user = root // 어떤 사용자로 서비스 실행할지

    server = /usr/sbin/in.telnetd // 서비스 실행 파일 경로 설정, 반드시 절대경로

    log_on_failure += USERID  // 서버 접속에 실패했을 때 로그파일에 기록할 내용 설정 +=는 뭐니

    no_access = 192.168.57.20 10.10.10.0/24 // 특정 주소 또는 대역 차단

    #only_from = 10.10.10.0/24 // 특정 주소 또는 대역만 허용

    access_times = 09:00-12:00 13:00-18:00 // 지정한 시간 범위 내에서만 접근 허용

    cps = 50 10 // 연결 요청을 제한하기 위한 설정 / 초당 연결 개수가 첫번째 인자 / 두번째는 그거 초과시 대기 초 수

    instances = 100 // 동시에 서비스 할 수 있는 서버의 최대 개수

    per_source = 10 // 출발지 IP를 기준으로 최대 서비스 연결 개수 지정

}

 

설정파일 변경 후 xinetd 데몬 재기동하여 서비스 설정 적용

접근 차단 로그 확인은 /var/log/messages 에서!

 

PAM 모듈(장착형 인증 모듈, Pluggable Authentication Modules)

PAM은 리눅스 시스템 내에서 사용되는 각종 어플리케이션 인증을 위해 제공되는 다양한 인증용 라이브러리

- 일반적으로 /lib/security 또는 /usr/lib/security 디렉터리에 해당 라이브러리가 저장

- 라이브러리들은 어플리케이션 인증 목적을 관리자에 의해 선택적으로 사용 가능

  이를 통해 소프트웨어 개발 시 인증부분을 독립적으로 개발할 수 있고 필요에 따라 인증체계 선택적 사용 가능

 

PAM 활용 예1 : root 계정의 원격 접속 제한

* 내 CentOS에서 pts 가 없어서 흥미가 떨어지네...

무든 /etc/securetty 에서 pts/0~pts/x 다 주석처리 하면 외부 접속 불가가 됨

 

PAM 활용 예2 : 계정 잠금 임계값 설정

/etc/pamd 디렉터리 내 system-auth 서비스 설정파일에 pam_tally(2) 모듈을 추가

auth     required pam_tally2.so      deny=5      unlock_time=120

 

pam_tally.so 모듈 옵션

 no_magic_root : root 계정은 패스워드 잠금 설정을 적용하지 않는다

 reset : 접속 시도 성공 시 실패한 횟수 초기화

 deny : 실패 횟수 지정하여 그 초과 실패시 패스워드 잠금

 unlock_time : 계정 잠금 후 마지막 계쩡 실패 시간부터 설정된 시간 지나면 계정 잠금 해제

 

PAM 활용 예 3 : root 계정 su 제한

권한이 없는 사용자가 su 명령 사용해 로그인 시도 및 패스워드 무작위 대입 공격이나 패스워드 추측 공격 하는것 막기

pam_wheel.so 모듈 이용

cat /etc/grop | grep 'wheel'

usermod -G wheel algisa

/etc/pam.d의 su 서비스 설정파일에서

auth required pam_wheel.so use_uid debug 주석 해제하기