SERVER/ubuntu

[리눅스시스템 보안]웹서버 구축 및 취약점을 통한 해킹2

혼자좀비 2024. 7. 6. 16:50

 1.웹 로그분석

웹서버의 접근 로그는 /var/log/apache2에 위치하며 다음과 같이 기본 점근 로그의 구조를 파악해야한다.

192.168.156.18 - - [06/Jul/2024:15:07:24 +0900] "GET /board/login_chk.php HTTP/1.0" 200 394 "-" "Mozilla/5.0 (Hydra)"

[순서대로] 접속자IP주소 ,접속시간 ,요청방식/요청페이지 ,프로토콜버전 ,HTTP응답코드 ,전송크기 ,접속브라우저도구

 

2.아파치 보안 설정

2.1 심볼릭 링크 기능 비활성화

 웹서버를 운영할때 리눅스의 심볼릭 링크 기능을 활용하면 웹 문서 경로이외의 경로에 접근할수 있다.

1.심볼릭 링크 생성

root@k-VirtualBox:/var/www/html# ln -s / sym.html

2.심볼릭 링크 생성 후 아래와 같이 /sym.html로 접근

3.웹서버에서 링크부분 비활성화

 - apache2.conf파일의 /var/www/안에 있는 Options iNdexes FollowSymLinks에서 FollowSymLinks삭제

 

root@k-VirtualBox:/etc/apache2# vim /etc/apache2/apache2.conf

 

웹서버 다시 실행

root@k-VirtualBox:/etc/apache2# systemctl restart apache2.service 

 

위와 같이 링크 부분을 비활성화 했기 때문에 접근할수 없다.

 

2.2디렉터리 리스팅 비활성화 

아래와 같이 디렉터리부분으로 접근을 하게 되면 디렉터리 구조를 볼수 있는데 비활성화를 하려면

/etc/apache2/apache2.conf파일에 Indexes부분을 수정하면 된다.

2.3 웹서버 정보노출 차단

웹서버 버전,운영체제버전,사용자 계정 같은 정보는 웹 서버에서 보안에 별 위협이 되지 않는다고 생각할수 있지만, 공격자에게는 공격에 필요한 정보를 수집할수 있는 기회가 되기도 하여 보안에 취약한 버전의 웹 서버가 운영된다면 공격자는 취약점을 활용해 수집한 정보로 웹서버를 해킹할수 있어 웹서버의 정보 노출을 막아야한다.

아래와 같이 브라우저에서 서버 정보를 미노출하는 방법을 배워보자

apache1.conf파일 수정

root@k-VirtualBox:/etc/apache2# vim /etc/apache2/apache2.conf

 

>재기동

root@k-VirtualBox:/etc/apache2# systemctl restart apache2.service 

 

위와 같이 apach2.conf파일을 설정하면 브라우저에 기본 정보만 노출이 된다.

 

2.4접근가능한 파일IP설정

 

웹서버를 운영하다보면 특정 IP또는 Ip대역을 허가하거나 차단해야 하는 경우가 있다. 리눅스에 내장된 방화벽이나 하드웨어의 방화벽을 사용할수 있지만, 웹 서버에 가상 호스트를 사용하고 있다면 해당 기능을 통해 가상 호스트별로 접근을 제어할수 있다.

1./etc/apache2/apache2.conf 파일과 ipblacklist.conf파일에 아래와 같은 내용을 추가하면 접속을 제어할수 있다.

apache.conf파일에 ipblacklist.conf파일을 include
ipblacklist.conf를 생성하여 차단할 ip를 등록한다

그러면 아래와 같이 차단되었다는 것을 확인할수 있다.

 

2.4불필요한 파일 제거

웹서버를 개발할때 사용했던 파일들이 웹서버에 남아있을수 있다. 이러한 파일을 가지고 공격자는 중요한 정보를 획득할수 있다. 따라서 불필요한 파일은 제거하는것이 좋다.

 

2.5HTTP메서드 제한

 웹서버에서 이용하는 HTTp프로토콜의 메서드는 get,post가 대표적이고 외적으로는 connect,options,hhead,put,delete,trace등 다양하다. 공격자는 보안에 취약한 메서드를 활용하여 공격할수 있으므로 아래와 같이 차단하는것이 좋다.

비활성화 확인

2.6 오류페이지 노출 수정

위와 같이 보여줄 html 경로와 파일명을 기재하면 해당 html파일을 보여주거나 위와 같이 메시지를 입력하면 메시지를 보여준다.

 

3. 아파치 ModSecurity

웹 방화벽은 하드웨어 형태와 소프트웨어 형태가 있다.  여기서 소프트웨어 형태의 오픈소스 웹 방화벽인 ModeSecurity를 적용하여 운영하는 방법을 알아보자

1. apt명령어로 설치

    >root@k-VirtualBox:/etc/apache2# apt install libapache2-mod-security2 

2.설치 후 /etc/modsecurity/ modsecurity.conf-recommended 파일을 modsecurity.conf명으로 복사한다.

    >root@k-VirtualBox:/etc/modsecurity# cp modsecurity.conf-recommended modsecurity.conf

위의 이미지와 같이 /etc/modsecurity/modsecurity.conf파일에 SecRuleEngine부분을 on하게 되면 서비스에 지장을 주지않고 탐지만 할수 있다.(off로 하면 취약점 도구로 보안 진단이나 테스트를 할수 있다.)

(To.웹 공격에 대한 로그는 /var/log/apache2/modsec_audit.log파일에서 확인할수 있다.)

 

OWASP기본 룰은 ModSecurity에 포함되지만 룰을 추가하거나 빼려면 /etc/apache2/mods-enabled/security2.conf 파일에서 수정하면 된다.

security2.conf파일
OWASP기본 룰에 포함된 owasp-crs.load파일

 위의 이미지와 같이 *.load부분이 룰에 포함되어있어 해당 owasp-crs.load파일을 읽어 보안에 대한 룰을 적용해 준다.

(OWASP:국제 웹 보안표준 도구로 웹취약점에 대해 분석하고 대응하는 방법등을 제공하는 비영리단체)

owasp-crs.load파일

4.보안서버 구축

웹서버를 운영할때 기본적으로 HTTP프로토콜을 사용하지만 네트워크 패킷 감청과 같은 문제가 발생할수도 있다. 따라서 사용자 로그인이나 중요 데이터를 처리하는 웹 서버라면 네트워크 패킷 감청에 대비하여 SSL/TLS(HTTPS)를 구축해 통신 구간을 안전하게 암호화 처리해야 한다.

HTTP는 평문통신(정보를 암호화하지 않고 있는 그대로 전송되는 통신)을 하기 때문에 패킷 감청을 할수 있어 어떤 내용을 주고 받는지를 제삼자가 볼수 있다. 이러한 보안 문제로 SSL(Secure Socket Layer)을 HTTP에 적용한 HTTPS가 나왔다.

국내에서는 개인 정보를 취급하는 모든 웹 사이트는 HTTPS를 적용하여 보안 서버를 구축하는 것을 의무화 하고 있다.

운영방식으로는 2가지가 있는데

1.사설SSL/TLS인증서를 생성하여 적용하는 방법으로 내부망에서 개발할때 주로 사용한다.

   (최신 웹 브라우저에서는 사설 인증서를 신뢰하지 않아 경고 메시지가 뜨지만 암호화는 적용되어 통신 된다.)

2.CA(Certificate Authority)에서 정식으로 SSL/TLS인증서를 구매하여 적용하는 방법

   (비용이 발생하므로 이러한 경우 비영리단체인 ISRG의 Let's Encrypt에서 제공하는 무료 인증서를 적용할수 있다.)

 

4.1 사설SSL인증서 발급과 적용

 1.사설 SSL인증서를 위한 라이브러리 설치 및 인증서를 보관할 디렉터리 생성

   > root@k-VirtualBox:/usr/share/modsecurity-crs# apt install openssl -y

   >root@k-VirtualBox:/usr/share/modsecurity-crs# mkdir /etc/apache2/ssl

 2. 개인키를 만들고 인증서 생성에 필요한 정보를 입력한다.

  > root@k-VirtualBox:/etc/apache2/ssl# openssl genrsa -des3 -out server.key 2048

  ※발급받은 인증서 사인 요청

  > root@k-VirtualBox:/etc/apache2/ssl# openssl req -new -key server.key -out server.csr

사인 요청을 할때는 위의 이미지와 같이 입력부분을 입력한다.

3.사설 인증서를 만들고 생성된 파일까지 확인한다.

 > root@k-VirtualBox:/etc/apache2/ssl# cp server.key server.origin

 > root@k-VirtualBox:/etc/apache2/ssl# openssl rsa -in server.origin server.key -out server.key 

 > root@k-VirtualBox:/etc/apache2/ssl# openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

위의 명령어를 실행한 결과

4.아파치 웹서버에 ssl모듈을 활성화하고 웹서버 설정 파일에 인증서를 설정한다.

 > root@k-VirtualBox:/etc/apache2/ssl# a2enmod ssl

아파치 ssl모듈 활성화 이미지

 >root@k-VirtualBox:/etc/apache2/sites-available# vim /etc/apache2/sites-available/default-ssl.conf

sites-available/default-ssl.conf 파일 설정>

※사이트 활성화 

> root@k-VirtualBox:/etc/apache2/ssl# a2enmod ssl

> root@k-VirtualBox:/etc/apache2/ssl# a2ensite default-ssl

※아파치 재시작

> root@k-VirtualBox:/etc/apache2/ssl# systemctl restart apache2

※HTTPS용 433 통신 포트 방화벽 설정

> root@k-VirtualBox:/etc/apache2/ssl# ufw allow 443/tcp

※방화벽 규칙 다시 읽기

> root@k-VirtualBox:/etc/apache2/ssl# ufw reload

위의 이미지와 같이 https://[서버주소]로 접근하면 경고가 발생을 한다.

기본적으로 주의 메시지로 사이트에 바로 접근하는것을 차단하지만 허용을 클릭하면 계속 암호화를 적용된 상태로 통실할수 있다.

 

4.2 공인SSL 인증서 발급과 적용

 무료로 SSL/TLS인증서를 제공하는 let's Encrypt를 구축하는 방법으로 적용해보자.

1.각종 패키지와 Certbot을 설치

  > root@k-VirtualBox:/etc/apache2/ssl# apt install certbot python3-certbot-apache

  ※설치전 웹서버를 잠시 멈춘다.

  > root@k-VirtualBox:/etc/apache2/ssl# systemctl stop apache2.service

2.도메인에 대한 SSL인증서를 발급받는다.

  > root@k-VirtualBox:/etc/apache2/ssl# certbot certonly --standalone -d [도메인명]

3.발급을 받으면 아파치에 적용.

 > 발급된 인증서 파일 위치 : /etc/letsencrypt/live/[도메인명]/

 > 아파치 웹서버에 적용 /etc/apache2/sites-available/default-ssl.conf파일에 발급한 인증서 경로를 설정

 - 설정 완료 후 웹서비스 재시작 : systemctl restart apache2