본문 바로가기

해봐야 안다.OTL/Linux

[리눅스] 웹서버 보안1

 

###############################[ Rpm -Va ]#########################################

명령어 : Rpm -va
패키지들을 검증해서 패키지 변조여부를 확인 할 수 있다.
만일 검증 결과 아무런 변화가 없다면 출력되는 것이 없습니다.
비교 결과 문제점이 발견되면 결과를 출력합니다.
출력 결과는 8글자의 문자열을 출력하고 다음에 c 가 나오면 설정 파일임을 뜻하며 다음에는 파일 이름을 차례로 한 줄로 출력합니다.
처음의 8글자들은 RPM 데이터베이스와 각 특성을 비교한 결과를 출력하게 됩니다.
점 한 개 (.) 는 아무 이상이 없다는 것을 의미합니다.
만일 비교 결과 문제점이 발견되면 다음과 같은 문자가 나타납니다.

5- MD5 체크섬
S- 파일크기
L- 심볼릭 링크
T- 파일 수정 시간
D- 장치
U- 사용자
G- 그룹
M – 모드 (허가와 파일 유형 포함)
? – 읽기 불가 파일
________________________________[ END ]_____________________________________________


############################[ linux version information ]#########################
로그인 정보수정 및 리눅스 버젼 정보 숨기기
/etc/\motd
/etc/issue / 릴리즈 정보
/etc/issue.net 릴리즈 정보
/etc/redhat-release 릴리즈 정보
/etc/services 포트 정보 주석처리하면 포트 막힘.
________________________________[ END ]_____________________________________________

 


############################[ TCP 3 handshake ]###################################
   Client                                                                                             Server
   김의일
┏━━━━━┓                                                                                   전민성
┃ Syn_sent ┃  >>>>>>>>>>>>>>>>> (SYN) >>>>>>>>>>>>>>>
┗━━━━━┛                                                                            ┏━━━━━━━┓ 
                                                                                                 ┃ Syn_receive  ┃
                                                                                                 ┗━━━━━━━┛
                      <<<<<<<<<<<<<<<< (SYN_ACK) <<<<<<<<<<<<
┏━━━━━━┓
┃Established ┃
┗━━━━━━┛                                                                          ┏━━━━━━┓  
                       >>>>>>>>>>>>>>>>>> (SYN) >>>>>>>>>>>>>> ┃Established ┃
                                                                                                  ┗━━━━━━┛

                                                    ┏━━━━━━┓
                                                    ┃ connection ┃
                                                    ┗━━━━━━┛

 

________________________________[ END ]_____________________________________________


############################[ NMAP 옵션 값 ]######################################
 
NMAP 옵션값
-sT 일반적인 TCP 포트 스캐닝
-sS  이른바 ‘half open 스캔으로 추적이 어렵다.
-sP ping 을 이용한 일반적인 스캔
-sU UDP 포트 스캐닝
-PO log 기록과 filtering 을 피할 수 있다.
-PT 일반적이 ICMP ping 이 아닌 ACK 패킷으로 ping 을 보내고
 Rst 패킷으로 응답을 받는다
-PI 일반적인 ICMP ping 으로 방화벽이나 필터링에 의해 걸러진다.
-PB ping을 할 때 ICMP ping 과 TCP ping 을 동시에 이용한다.
-PS ping 을 할 때 ACK 패킷대신 SYN 패킷을 보내 스캔
-O  대산 호스트의 OS 판별
-P 대상 호스트의 특정 포트를 스캔하거나, 스캔할 포트의 범위를 지정 Ex) –p 1-1024
-D Decoy 기능으로 대상 호스트에게 스캔을 실행한 호스트의 주소를 속인다.
-F /etc/services 파일 내에 기술된 포트만 스캔
-I  TCP 프로세서의 identd 정보를 가져온다.
-n IP 주소를 DNS 호스트명으로 바꾸지 않는다. 속도가 빠르다.
-R  IP 주소를 DNS 호스트명으로 바꿔서 스캔. 속도가 느리다.
-o 스캔 결과를 텍스트 파일로 저장.
-i 대상 호스트의 정보를 지정한 파일에서 읽어서 스캔
-h 도움말 보기


________________________________[ END ]_____________________________________________


############################[ Apache Webserver 보안 ]#############################
------------------------------------------------------------------------------------

#우선 컴파일 전에 source 를 수정 함으로 몇 가지 내용을 보안 적으로 설정 하겠다.
1 Httpd.h 혹은 ap_release.h 파일을 수정 함으로써 banner grabbing 을 통한 web server version 을 노출하는 것을 막는다.

2 아파치의 기본적인 최대 httpd 프로세스 개수 >> mpm 을 사용하는 pork 의 방식이 prefork와 worker 방식이 있는데 요새는 worker 를 많이 쓰는 추세이다.
Mod_rewrite 한글 문서
http://httpd.apache.org/docs/2.2/ko/misc/rewriteguide.html

http Banner grabbing 방법
1 telnet hostname 80 연결 후에 HEAD /HTTP /1.0 입력하고 엔터 치면 무언가 나온다.
2 wget –S -–spider 호스트 주소



------------------------------------------------------------------------------------

 

 

 


------------------------------------------------------------------------------------

banner grabbing 방지 차원에서 banner 정보 변조
httpd 서버 컴파일 전에 바꿈


[root@kakasi include]# pwd
/usr/local/src/apm/httpd-2.2.14/include
[root@kakasi include]# vi ap_release.h
```````````````````````````````````````````````````````````````````
27 #define AP_SERVER_COPYRIGHT \
28         "ⓒ 2008 Microsoft Corporation. All rights reserved."
41 #define AP_SERVER_BASEVENDOR "Microsoft Corporation"
42 #define AP_SERVER_BASEPROJECT "Microsoft IIS Web Server"
43 #define AP_SERVER_BASEPRODUCT "Microsoft IIS/6.0"
44
45 #define AP_SERVER_MAJORVERSION_NUMBER 6
46 #define AP_SERVER_MINORVERSION_NUMBER 0
47 #define AP_SERVER_PATCHLEVEL_NUMBER   15
48 #define AP_SERVER_DEVBUILD_BOOLEAN    0

````````````````````````````````````````````````````````````````````
:wq

------------------------------------------------------------------------------------

------------------------------------------------------------------------------------
<컴파일 및 설치>
[root@kakasi httpd-2.2.14]# ./configure \
> --prefix=/usr/local/http \
> --enable-mods-shared=all \
> --enable-so \
> --enable-rewrite \
> --enable-ssl \
> --with-mpm=worker \
> && make && make install

------------------------------------------------------------------------------------

------------------------------------------------------------------------------------
[root@kakasi conf]# vi httpd.conf
````````````````````````````````````````````````````````````
116 User webuser
117 Group webuser

````````````````````````````````````````````````````````````
:wq
------------------------------------------------------------------------------------

------------------------------------------------------------------------------------
[root@kakasi httpd-2.2.14]# useradd -M -s /bin/false webuser
------------------------------------------------------------------------------------

------------------------------------------------------------------------------------
httpd 서버 데몬 확인
[root@kakasi conf]# ps -ef |grep httpd
root      5266     1  1 04:15 ?        00:00:00 /usr/local/http/bin/httpd -k start
webuser   5273  5266  0 04:15 ?        00:00:00 /usr/local/http/bin/httpd -k start
webuser   5274  5266  0 04:15 ?        00:00:00 /usr/local/http/bin/httpd -k start
webuser   5275  5266  0 04:15 ?        00:00:00 /usr/local/http/bin/httpd -k start
webuser   5282  5266  0 04:15 ?        00:00:00 /usr/local/http/bin/httpd -k start
------------------------------------------------------------------------------------

------------------------------------------------------------------------------------
httpd의 부모프로세스
[root@kakasi conf]# ps -ef  |grep init
root         1     0  0 01:08 ?        00:00:03 init [5]
------------------------------------------------------------------------------------

------------------------------------------------------------------------------------
서버의 배너 그랩 확인
[root@kakasi conf]# wget -S --spider http://localhost
--04:16:00--  http://localhost/
Resolving localhost... 127.0.0.1
Connecting to localhost|127.0.0.1|:80... connected.
HTTP request sent, awaiting response...
  HTTP/1.1 200 OK
  Date: Tue, 13 Oct 2009 19:16:00 GMT
  Server: Microsoft IIS/6.0/6.0.15 (Unix) mod_ssl/6.0.15 OpenSSL/0.9.8e-fips-rhel5 DAV/2
  Last-Modified: Sat, 20 Nov 2004 20:16:24 GMT
  ETag: "1e8a5a-2c-3e9564c23b600"
  Accept-Ranges: bytes
  Content-Length: 44
  Keep-Alive: timeout=5, max=100
  Connection: Keep-Alive
  Content-Type: text/html
Length: 44 [text/html]
200 OK
------------------------------------------------------------------------------------

------------------------------------------------------------------------------------
[root@kakasi conf]# telnet localhost 80
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
HEAD / HTTP /1.0

HTTP/1.1 200 OK
Date: Tue, 13 Oct 2009 19:16:11 GMT
Server: Microsoft IIS/6.0/6.0.15 (Unix) mod_ssl/6.0.15 OpenSSL/0.9.8e-fips-rhel5 DAV/2
Last-Modified: Sat, 20 Nov 2004 20:16:24 GMT
ETag: "1e8a5a-2c-3e9564c23b600"
Accept-Ranges: bytes
Content-Length: 44
Connection: close
Content-Type: text/html

Connection closed by foreign host.
------------------------------------------------------------------------------------


[root@kakasi conf]# cp ../bin/apachectl /etc/init.d/httpd

[root@kakasi conf]# vi /etc/init.d/httpd
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
 1 #!/bin/sh
 2 #chkconfig:2345 90 90
 3 #description:init file for Apache Server daemon
 4 #processname:/usr/local/http/bin/apachectl
 5 #config:/usr/local/http/conf/httpd.conf
 6 #pidfile:/usr/local/http/logs/httpd.pid
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
:wq

[root@kakasi conf]# chkconfig --add httpd
[root@kakasi conf]# chkconfig --level 3 httpd on
[root@kakasi conf]# service httpd stop


[root@kakasi http]# ls
bin  build  cgi-bin  conf  error  htdocs  icons  include  lib  logs  man  manual  modules
[root@kakasi http]# mkdir web
[root@kakasi http]# chown -R webuser:webuser web
[root@kakasi http]#
[root@kakasi http]#
[root@kakasi http]# vi conf/httpd.conf
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
155 DocumentRoot "/usr/local/http/web"
182
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
:wq

[root@kakasi http]# cd web
[root@kakasi web]# touch index.html
[root@kakasi web]# echo hello world > index.html

이제 /etc/sysconfig/iptables 에 80포트 추가해준다.
그다음 익스플로러로 테스트
<끝>

________________________________[ END ]_____________________________________________