일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- Burp Suite
- ISMS-P
- Iam
- AWS SAA
- 취약점
- ncp
- AWS
- 개인정보보호법
- 클라우드보안
- 클라우드서비스
- EC2
- 네이버클라우드
- 클라우드자격증
- RDS
- 보안컨설팅
- 로그분석
- 로드밸런서
- azure
- 공개키
- isms
- 정보보안
- 인스턴스
- 파일시그니처
- 와이어샤크
- metasploit
- mysql
- 정보보호
- 클라우드
- 클라우드 자격증
- AWS SSA
- Today
- Total
처음 만나는 클라우드 보안
웹서버 구축 & 웹방화벽(Modsecurity) 올리기 본문
이번 포스팅에선 웹서버를 구축, 그 위에 웹방화벽 설치한다.
웹 방화벽 (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 접속
2. 게시판 공격 수행
- 기본 인젝션 공격 'or 1=1 # => '공백 없이 입력해라'
- 공백 제외 후 재공격 '% 20or%2011=1%20# =>20or201120, 특수문자 자동으로 제거됨
- cd /var/www/html/gnuboard5/data/file/free // 업로드 파일명이 모두 바뀐다. 웹쉘 실행이 불가함
웹쉘, 기본적인 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
- Apache2 (gnuboard) - Modsecurity 설치 완료
이번엔 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 인젝션 공격
Gnuboard: 자체 시큐어코딩으로 기본적인 SQL 인젝션 공격 불가
php스크립트: 기본 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
추후 포스팅 예정: Ubuntu-server를 이용한 DVWA 또는 beebox설치, 공식 홈페이지에 최신 버전 다운 가능함
참고자료
https://www.pentasecurity.co.kr/web-application-firewall/
'정보보안' 카테고리의 다른 글
사전 공격(Dictionary Attack) 실습 (6) | 2022.05.17 |
---|---|
CSRF공격을 활용한 사용자 패스워드 변경하기 (0) | 2022.05.17 |
침입탐지 시스템(IDS) - snort, suricata, 패턴 읽기 (0) | 2022.05.13 |
Check Point: Smart View 둘러보기 (Record, Smart dashboard) (0) | 2022.05.13 |
Check Point 설치 및 기본적인 SPI방화벽 구성하기 (0) | 2022.05.12 |