처음 만나는 클라우드 보안

웹서버 구축 & 웹방화벽(Modsecurity) 올리기 본문

정보보안

웹서버 구축 & 웹방화벽(Modsecurity) 올리기

영민하게 2022. 5. 16. 19:01
반응형

이번 포스팅에선 웹서버를 구축, 그 위에 웹방화벽 설치한다.

 

웹 방화벽 (Web Application Firewall, WAF) 이란?

: 일반적인 네트워크 방화벽(Firewall)과 달리 웹 애플리케이션 보안에 특화된 보안 솔루션을 말한다. 웹 애플리케이션 또는 서버와 가까운 LAN(Local Area Network)에 설치되어(HW 장비일 경우) 네트워크 속도에 큰 영향을 주지 않는다. 7 계층(L7)에서의 패턴, 요청 개수, 이상행위 등을 판단하여 패킷을 허용 또는 차단하는 기능을 수행한다.

 

서버 구축방법

*2Tier기반의 **동적 웹사이트를 아래와 같이 구축한다. 웹서버로 Apache2, 웹방화벽으로 Modsecurity가 공통으로 적용되며, 두가지 웹어플리케이션 (Gnuboard, PHP소스코드)에 따라 구분된다.

웹서버 웹 어플리케이션  웹방화벽
Apache2  Gnuboard Modsecurity
PHP스크립트

*2tier: Client - webserver

3 tier: Client - webserver - DB server (안정성, 보안성 향상된다.)

**정적 웹페이지(Static Web Page): 사용자의 요청에 해당하는 파일을 그대로 전달

동적 웹페이지 (Dynamic Web Page): 사용자의 요청에 따라 데이터를 가공한 후 전달 가능

 


1. 웹서버 만들기 (*2-Tier)

우분투를 기반으로 **동적 웹사이트를 구축 (Apache2-웹서버, PHP, Web App, MySQL)

 

 

 

 - 우분투 웹서버 구축 (Gnuboard)

//우분투 웹서버 구축 (*gnuboard이용)

$ sudo apt install apache2    // 웹서버 설치

$ sudo apt install mysql-server    //Database설치 (MySQL)

$ sudo mysql -u root -p    //MySQ접속, 패스워드 없음, 엔터

mysql> create database gnuboard;

mysql> create user board@localhost identified by 'pass12#';    //사용자 계정 생성

mysql> grant all privileges on gnuboard.* to board@localhost;    //board에게 gnuboard의 모든 테이블 권한부여

$ sudo apt install php php-mysql php-common php-gd php-fpm php-xml php-json php-curl // 웹서버에 필요한 언어 설치 (총 9개)

//워드프레스는 플러그인에 따라 느려지고 취약점 발생, 그누보드는 빠르고 간편 보안성도 강하다.

$ cd /var/www/html

$ sudo git clone http://github.com/gnuboard/gnuboard5    //githun에서 소스코드 복제

$ cd gnuboard5

$ sudo mkdir data

$ sudo chmod 707 data    // 사용자 및 다른사용자에게 읽고 쓰기 실행 권한 설정

$ sudo service apache2 restart    // 웹서버 재시작 -->https://ip주소/gnuboard5 접속

 

위에서 설정해준  SQL 사용자 아이디, 패스워드를 모두 입력한다

 

2. 게시판 공격 수행

  - 기본 인젝션 공격 'or 1=1 #  => '공백 없이 입력해라'

  - 공백 제외 후 재공격 '% 20or%2011=1%20# =>20or201120, 특수문자 자동으로 제거됨

  - cd /var/www/html/gnuboard5/data/file/free // 업로드 파일명이 모두 바뀐다. 웹쉘 실행이 불가함

gnuboard에선 직접객체참조(DOR) 방식을 채택했다.

 

웹쉘, 기본적인 sql인젝션 공격 안 통함

=> Gnuboard는 기본적으로 시큐어코딩이 적용됨을 알 수 있다. 

 

3. 웹방화벽 설치 : Modsecurity

Apache2위에 소프트웨어 웹방화벽인 Modsecurity를 설치한다.

 

 

참고) VI (VIM) 사용법

VIM vs VI 편집기
: 기존 vi보다 사용이 더 간편한 vim

VI 사용법
$suo do vi [파일명]
:set nu  // 왼편에 노란색 번호 표기됨
/SecRule  //  /이후 매칭된 글자 찾기, 엔터입력, 해당줄로 이동 (예시-오른쪽 캡처)
i   //  편집모드 시작
ESC  // 명령모드로 돌아옴
:wq    // 저장하고 종료



 

 - Apache2에 웹방화벽(Modsecurity) 설치

//Modsecurity 설치

$ sudo apt install libapache2-mod-security2    // Apache2에 Modsecurity를 설치

$ sudo a2enmod security2

$ systemctl restart apache2

//conf파일 변경

$ sudo mv modsecurity.conf-recommended modsecurity.conf    //-recommended제거 (/etc/modsecurity)

$ sudo vi modsecurity.conf

  # SecRuleEngine DetectionOnly --> SecRuleEngine On

  # SecAuditLogParts ABDEFHIJZ --> SecAuditLogParts ABCEFHJKZ

$ sudo systemctl restart apache2



//Modsecurity Rules (패턴) 다운로드

$ sudo wget https://github.com/coreruleset/coreruleset/archive/v3.3.0.tar.gz 

$ sudo tar xvf v3.3.0.tar.gz    // 압축해제 xvf: -extract(추출) -verbose(자세한정보표시) -file(파일이름지정) 

$ sudo mv coreruleset-3.3.0/ /etc/apache2/modsecurity-crs/    //apache2디렉토리로 이동

$ sudo mv crs-setup.conf.example crs-setupconf    //exemple제거

$ sudo vi /etc/apache2/mods-enabled/security2.conf    // 캡처의 12번 13번 라인을 수정한다.

$ sudo apache2ctl -t    // 수행테스트 systax OK 메세지 => 정상작동

$ sudo systemctl restart apache2

security2.conf 파일 수정예시

 

 - Apache2 (gnuboard) - Modsecurity 설치 완료

Modsecurity 설치완료, 인젝션 공격에 대해 404에러페이지가 나타났다

 


 

 

이번엔 PHP스크립트를 이용하여 회원관리 시스템 웹서버를 대상으로 실습해본다.

 

 

1. 웹서버 만들기

gnuboard가 아닌 php문을 활용해 DB에 직접 입력시키는 웹서버를 구축

 

 

php로 구동되는 웹서버 만들기

$ sudo  apt  install  apache2    // apache2 설치

$ sudo  apt  install  mysql-server    //Database 설치 (MySQL)

$ sudo  apt  install  php  php-mysql  php-common  php-gd  php-fpm   php-xml  php-json  php-curl  git    //웹서버 구동 툴 설치 (총 9개)

$ sudo  mysql  -u root -p

mysql> create  user  bts@'%'  identified by  'dynamite';    //%는 외부 어디서나 접속 가능 ''작은따옴표 안에 기입

mysql> grant  all  privileges  on  *.*  to  bts@'%';    //모든 권한을 bts에게 부여



// 웹서버 소스코드 다운 및 수정

$ cd ~  // cafe.naver.com/ciscocafe/408 에서 해당 파일 다운 후 Download경로로 이동 

$ sudo  unzip  code01.zip                 // 압축해제  (PW : kt12#$)

$ sudo  mv  *.php   /var/www/html         // 웹서버 루트 디렉토리로 이동

$ cd  /var/www/html

$ sudo  vi  01.php                          // 모든 소스코드의 root-->bts, passwd-->dynamite 변경

$ ip addr                      // IP주소를 확인 후 접속

 

 

2. 서버 접속 후 SQL 인젝션 공격

sql인젝션 공격으로 계정정보 확인이 가능하다.

 

Gnuboard: 자체 시큐어코딩으로 기본적인 SQL 인젝션 공격 불가

php스크립트: 기본 SQL인젝션공격 가능 => 취약점이 존재 => 웹방화벽 필요

 

추가 취약점) 구글 검색 시 sql관련 정보가 누출될 수 있다.

 

(※주의) 구글상에 sql정보가 노출 될 수 있다.

 

3. 웹방화벽(ModSecurity) 설치

 

ModSecurity설치 (위와 동일)

//Modsecurity 설치

$ sudo apt install libapache2-mod-security2    // Apache2에 Modsecurity를 설치

$ sudo a2enmod security2

$ systemctl restart apache2

//conf파일 변경

$ sudo mv modsecurity.conf-recommended modsecurity.conf    //-recommended제거

$ sudo vi modsecurity.conf

  # SecRuleEngine DetectionOnly --> SecRuleEngine On

  # SecAuditLogParts ABDEFHIJZ --> SecAuditLogParts ABCEFHJKZ

$ sudo systemctl restart apache2



//Modsecurity Rules (패턴) 다운로드

$ sudo wget https://github.com/coreruleset/coreruleset/archive/v3.3.0.tar.gz 

$ sudo tar xvf v3.3.0.tar.gz    // 압축해제 xvf: -extract(추출) -verbose(자세한정보표시) -file(파일이름지정) 

$ sudo mv coreruleset-3.3.0/ /etc/apache2/modsecurity-crs/    //apache2디렉토리로 이동

$ sudo mv crs-setup.conf.example crs-setupconf    //exemple제거

$ sudo vi /etc/apache2/mods-enabled/security2.conf    // 캡처의 12번 13번 라인을 수정한다.

$ sudo apache2ctl -t    // 수행테스트 systax OK 메세지 => 정상작동

$ sudo systemctl restart apache2

 

Modsecurity2 설치 완료

 

웹방화벽(Modsecurity)으로 기본 SQL인젝션 공격이 차단되었다.

 

 

 

추후 포스팅 예정: Ubuntu-server를 이용한 DVWA 또는 beebox설치, 공식 홈페이지에 최신 버전 다운 가능함

 

 

 


 

참고자료

https://www.pentasecurity.co.kr/web-application-firewall/

 

웹방화벽이란?(WAF) | 펜타시큐리티시스템

웹방화벽은 웹 공격 탐지 및 차단, 정보유출방지솔루션, 부정로그인방지솔루션, 웹사이트위변조방지솔루션 등으로 활용이 가능합니다. 이 곳에서는 웹방화벽에 대한 자세한 정보와 펜타시큐리

www.pentasecurity.co.kr

https://titus94.tistory.com/4

 

정적인 페이지와 동적인 페이지의 차이점이란?

정적 웹 페이지 (Static Web Page) 서버(웹 서버, Web Server)에 미리 저장된 파일(HTML 파일, 이미지, JavaScript 파일 등)이 그대로 전달되는 웹 페이지 서버는 사용자가 요청(Request)에 해당하는 저장된 웹..

titus94.tistory.com

 

반응형
Comments