사진 출처 : https://terms.naver.com/entry.nhn?cid=51207&docId=2271810&categoryId=51207

OSI 7 계층(Open Systems Interconnection) 개요

초기에는 표준 규격이 없어 상호 통신에 있어 호환성이 떨어졌다. 그래서 1984년 국제 표준화 기구(ISO)에서 OSI 7계층 참조 모델을 발표하게 된다. OSI같은 표준 모델이 필요한 이유는 무엇일까? 그 이유는 일상생활에서도 찾아볼 수 있다. 컴퓨터를 조립할 때 보통 여러 회사들의 부품을 섞어서 조립한다. 예를 들어, 메인보드는 MSI, 파워는 Antec, 그래픽카드는 Galaxy 등 표준 규격이 정해져 있기 때문에 서로 호환이 가능한 것이다. 결론적으로 OSI 모델은 호환성 문제를 해결할 뿐만 아니라 데이터 흐름 확인, 문제발생 해결에 용이하다.

 

OSI 7 계층별 설명

"안녕!" 이라는 데이터를 보내면 상위계층에서 하위계층으로 데이터를 보내게 된다. 7계층부터 한 계층씩 내려갈 때마다 각 계층의 특성에 맞는 헤더가 붙는데, 이것을 캡슐화라고 한다. 물리 계층까지 도달하면 랜선이나 동축케이블를 통해 다시 수신자의 물리 계층부터 응용 계층까지 역을 올라가는데, 캡슐화와 반대로 헤더를 제거하는 것을 역캡슐화라고 한다. 데이터의 흐름을 간단하게 알아보았는데, 계층별 역할에 대해서도 간단히 정리해보았다.

 

■ Application Layer - 응용 계층

OSI 모델의 최상위 계층으로 사용자가 작업하는 계층이며, 우리가 자주 사용하는 인터넷 브라우저나 카카오톡 같은 메신저 등, 응용프로그램들이 동작한다.

EX) HTTP, FTP, Telnet, SMTP

 

 Presentation Layer - 표현 계층

응용 계층으로부터 전달받은 데이터를 읽을 수 있는 형식으로 변환한다. 응용 계층으로부터 전송받거나 전달되는 데이터의 인코딩과 디코딩은 표현 계층에서 이루어진다. 또한 데이터의 암호화와 복호화 기능도 수행한다. 

EX) ASCII, MPEG, JPEG

 

Session Layer - 세션 계층

두 호스트간의 상호작용을 설정하고 유지하며, 동기화하는 역할을 한다. 실제 네트워크 연결이 이루어지는 곳이라 보면 된다.

EX) SSH, TLS

 

Transport Layer - 전송 계층

두 호스트간의 사용자들이 신뢰성있는 데이터를 주고 받게 해주는 역할을 한다. 또한 흐름제어, 분할/분리 및 오류제어 기능을 수행한다.

EX) TCP, UDP

 

Network Layer - 네트워크 계층

패킷을 송신측에서부터 목적지까지 전송하는 역할을 한다. 송수신 측의 IP주소를 지정하고 패킷이 최종목적지까지 최적의 경로로 전송하는 라우팅 기능이 있다.

EX) IP, ICMP, ARP / 라우터, 스위치

 

Data Link Layer - 데이터 링크 계층

물리적인 네트워크를 통해 데이터를 전송하는 수단을 제공한다. 전송 단위는 프레임이며, MAC주소를 통해 통신한다.

EX) HDLC, FDDL / 스위치, 브릿지

 

Physical Layer - 물리 계층

전기적, 기계적, 기능적인 특성을 이용해 데이터를 전송한다. 물리 계층에서 사용되는 단위는 비트이다.

EX) 랜선, 동축케이블, 허브, 리피터

https://github.com/Security-Onion-Solutions/security-onion/blob/master/Verify_ISO.md

 

Security-Onion-Solutions/security-onion

Linux distro for threat hunting, enterprise security monitoring, and log management - Security-Onion-Solutions/security-onion

github.com

시큐리티 어니언은 ELK, snort, suricata 등 각종 모니터링 도구들을 제공하는 오픈 소스 리눅스 배포판이다. 무엇보다도 무료라는게 강점이다. 현재 ESXi에 여러 시스템을 구축하고 시큐리티 어니언으로 IDS을 구축했지만 여기서는 브리지모드로 현재 컴퓨터의 네트워크 대역에 설치해보겠다. 설치 환경은 다음과 같다.

CPU / MEMORY 라이젠 3600 / 16GB 3200MHz
NETWORK 192.168.43.0/24 (핫스팟)
가상머신 Virtual Box
준비물 Security Onion 설치 파일 (ISO)

그림 1 - 가상 머신 설정

'그림 1'에서 보이지는 않지만 CPU는 2개주었고, 메모리는 권장사항이 16GB이지만 실습환경이므로 4GB만 주었다. 네트워크는 브리지모드로 NIC를 하나 더 추가해 하는 관리용, 다른 하나는 모니터용으로 사용할 것이다. 두번째 어댑터는 고급을 눌러 무작위 모드를 '모두 허용'으로 설정해야 한다.

 

설치과정은 사진만 따라가면 되는데, 설치 과정 사진이 VMware,VirtualBox 사진 둘다 섞여있어서 상이 할 수 있음!

 

그림 2

시큐리티 어니언 ISO파일을 넣고 부팅하게되면 '그림 2'와 같은 평범한 리눅스 바탕화면이 나오는데, Install을 눌러 설치를 진행하면 된다.

언어 설정부터 계정 생성까지 진행 후 재부팅을 하면 Setup이라는 파일이 하나 생긴다. 이것을 눌러 똑같이 진행한다.

Yes를 누르면 관리용 인터페이스를 선택하라고 한다. 터미널을 열어 ifconfig 명령어로 확인 후 넘어간다. 여기서는 enp0s3 인터페이스가 관리용이고 enp0s8이 모니터링용이다.

실습 환경이므로 DHCP 설정으로 하고 계속 넘어간다.

모니터링용 인터페이스 설정까지 완료하고 재부팅을 하게되면 똑같이 Setup을 한번 더 누른다.

모드 설정이 나오는데, 두개의 차이점이라면 무료와 유료의 차이점이다. Evaluation Mode를 선택하겠다. 그 다음은 Kibana, Squert, Sguil에 접속할 아이디와 비밀번호만 설정하면 된다.

 

출처 : https://www.kisa.or.kr/business/infor/inforpro_4.jsp

참고용.

현재까지 설정으로는 VLAN으로 대역은 나눴지만 어디든지 통신이 가능한 상태이다. 방화벽의 ACL 룰 설정을 통해 기본적인 통신은 차단하고 필요한 것들만 열도록 하겠다.

 

위 과정은 RFC1918의 Aliases를 만드는 과정이다. RFC1918은 사설 IP 주소의 범위를 약속한거다. 효율적으로 ACL 룰 작성하려고 만들었다. 다음은 ACL 룰 작성으로 넘어가겠다.

 

위쪽 화살표 Add를 누르고 위와 같이 아까 만든 RFC1918 대역의 통신을 차단하는 룰을 작성한다. Log도 체크한다. 저장하게되면 VLAN10 대역에서 RFC1918로 나가는 통신은 불가능하다. 하지만 VLAN10 대역도 RFC1918에 속해있는건 마찬가지로 안에서도 통신이 불가능하다.

출발지, 목적지를 WEB net으로하면 서로 통신이 가능하게 만들수있다.

VLAN10_WEB뿐만 아니라 똑같은 방식으로 나머지도 작성해준다. 참고로 vlan20 설정을 마치면 pfsense 페이지가 끊긴다. VLAN20 대역외에는 모두 block 했기때문에 10.20.1.1로 들어가면 된다. 이제 필요한 서비스들만 허용해주면 되는데,  WEB서버의 http(80) 서비스를 허용해주도록 하자.

목적지를 vlan10으로 하고 포트는 http를 선택해주면 된다. 저장하고 웹서버에 apache나 nginx를 올려 접속해보자. 해당 서버에서 방화벽설정을 해줘야 접속이 가능하므로 OS에 맞게 설정하면 된다. 여기선 CentOS이므로 selinux 비활성화와 firewalld에 http 서비스만 추가해주었다.

추가적으로 NAT 설정까지해서 외부로 개방해보자. 어차피 vlan10 대역의 웹서버는 외부 개방이 되어야하는 서버이다.

 

Firewall - NAT - Port Forward탭에서 Add 버튼을 누르고 위와 같이 설정한다. 목적지 포트 범위에 HTTP를 선택하고, 리다이렉트할 주소를 적는다. 리다이렉트 포트도 HTTP를 선택하고 저장한다.

위 사진은 Interfaces에서 WAN 설정화면이다. 맨 밑으로가서 저 두개를 체크 해제한다. 읽어보면 RFC 1918 관련해서 block 한다는 내용임을 예측할 수 있는데, 방화벽에 보면 관련 ACL룰이 작성되어있는것을 확인할 수 있다. 체크 해제하고 저장하면 ACL룰이 사라지고 외부통신이 될 것이다. 내 컴퓨터에서 pfsense wan아이피로 접속해보자.

 

지금까지 설정은 ESXi를 벗어나서 내 컴퓨터까지만 접속하게된 것이다. 완전 외부로 개방하고싶다면 실제 사용하고있는 공유기에서 포트포워딩을 한번더 해줘야한다. 

#3에서는 VLAN을 사용해서 망을 분리하겠다. 구성도를 그려보자면 다음과 같다.

 

  • vlan 10 : 웹 서버 대역이며 외부로 오픈되는 곳이다.
  • vlan 20 : 오피스망으로 직원들이 사용하는 곳이다.
  • vlan 30 : 회사 내부망. 직원들만 접속 가능하다.
  • vlan 40 : 데이터베이스. 데이터 저장소이다.

 

Interfaces - Assignments

VLANs 탭에 들어가서 추가를 누른후 위와 같이 입력한다. web뿐만아니라 다른 영역들도 추가해주었다.

Interfaces - Assignments

이번에는 Interface Assignments 탭으로 들어가 Add를 눌러 전부 추가한다. 인터페이스명이 OPT로 시작하는데 하나씩 눌러서 다음과 같이 설정한다.

Enable를 체크해서 활성화 시켜주고 IPv4는 Static으로 한다. Addres는 10.10.1.1/24를 할당하였다. 저장을 하면 Apply Changes 버튼이 뜨는데 눌러줘야 저장이 된다.

VLAN을 구성하였으면 통신을 위해 방화벽 ACL 룰 설정을 해줘야한다. firewall - rules - VLAN10_WEB 가서 위로된 화살표 추가버튼을 누르고 위와 같이 설정했다. 액션은 pass로 통과시킨다는 뜻이고 프로토콜을 any, 출발지를 vlan10 대역으로 지정해서 어디든지 통신이 가능하게끔 한다. 물론 추후에 다른 대역으로 가는 통신은 block 할 것이다.

다음은 DHCP 서버를 사용해서 자동으로 아이피를 부여하는 작업이다. DHCP를 사용안하면 일일이 아이피를 입력해야하므로 테스트하기엔 귀찮을수도 있다. 서비스 메뉴에 있으며 활성화해주고 범위를 지정해주면 된다. 저장했으면 vsphere 웹브라우저로 돌아가 포트를 추가해 VLAN 태그를 설정한다.

LAN의 VLAN ID는 4095로 변경해야지 통신이 된다. 검색해보니 모든 VLAN으로 패킷을 전달한다고 한다. 이렇게해서 VLAN 작업이 마무리되었는데, VM을 추가적으로 생성해서 해당 VLAN에 연결해보자. 나는 CentOS를 웹,인트라넷,DB용으로 3개 설치하였다. 설치할때 네트워크 어댑터는 LAN 아닌 각각의 VLAN으로 잡아줘야한다.

#2에서는 pfSense 설치와 네트워크 설정을 해보겠다. 방화벽을 사용하기 위해서는 NIC가 2개 필요하다. 외부로 나가는 WAN과 내부로 가는 LAN 추가해보겠다. 우선 ESXi를 셧다운시키고 ESXi VM설정에 들어간다.

 

하단에 Add를 눌러 네트워크 어댑터를 2개 추가한다.

하나는 Bridged로 설정하고 하나는 LAN segment로 설정했다. LAN segements.. 버튼을 눌러 추가하면 된다. 그리고 다시 ESXi를 구동시킨다. 이렇게 3개의 NIC를 사용하는 이유는 방금 추가시킨 2개는 WAN과 LAN으로 사용할 것이고 기존에 있던 NIC는 백도어용이다. 실제 환경에서는 있어선 안되며 지금은 실습 환경이므로 편리하게 접속하기 위함을 참고해두자.

탐색기에서 네트워킹을 클릭한다. 여기서 네트워크 관련 설정들을 할 수 있는데, VM Network는 vSphere용 인터페이스라고 보면된다. 이건 넘어가고 가상 스위치 탭으로 가보자.

사진에는 안나와있지만 가상 스위치 추가 버튼을 눌러 위와 같이 작성한다. 스위치 이름은 기존에 vSwitch0이 있으므로 똑같이 숫자만 늘리겠다. 업링크는 NIC인데 눌러보면 2개가 나온다. vmnic1의 맥주소는 82:1f:71이며 WAN으로 사용하려고 bridged로 설정했었다. 이대로 추가하고 LAN으로 사용할 스위치도 위와 같이 추가해준다. vmnic1 업링크를 사용했으니 vmnic2밖에 없을 것이다. NIC의 맥주소를 확인하고 싶으면 물리적 NIC 탭이랑 VM설정에서 해당 네트워크를 눌러 확인하면 된다.

다시 포트 그룹 탭으로 가서 이번에는 포트 그룹 추가를 한다. 위와 같이 스위치 구분잘해서 추가하도록 한다. 이 과정들은 장비에서 각 NIC에 케이블 연결하는 과정이라고 보면 된다.

탐색기 - 가상 시스템으로 가서 VM을 생성해보자. 이름은 구분하기 위해 UTM_PFSENSE로 했으며 기타 Linux 64비트로 설정했다. 계속 다음을 눌러 4번까지 진행한다.

CPU, 메모리, 하드용량은 적당히 설정하고 네트워크 어댑터를 하나 더 추가해 위와 같이 설정한다. ISO파일은 데이터스토어에 업로드한 ISO로 설치하면 된다.

전원을 켜 콘솔화면으로 들어간다. 전원 켜기 버튼 맨 좌측에 콘솔 버튼이 있으니 브라우저 콘솔로 열든지 새창에서 열든지 마음대로 하면된다. 브라우저 콘솔 같은경우에는 오류가 조금 있는거 같아서 나는 새창으로 열었다.

설치 화면인데 딱히 설명이 필요없기 때문에 생략한다. 계속 디폴트 값에 두고 엔터만 눌러주었다. 리붓할때도 건드리지않고 가만히 냅두면 된다.

pfSense가 설치가 잘되었다. 화면에 WAN과 LAN이 보이는데 LAN 아이피만 잡혀있는 것으로 보아 pfSense내에서 네트워크를 다시 설정해주어야 한다. 1번을 입력한다.

그러면 위와 같은 텍스트가 나오는데 em0의 맥주소와 em1의 맥주소를 메모장에 잘 적어두자. 그리고 n을 입력해 vlan 관련 질문을 넘어간다.

WAN 인터페이스가 em0인지 em1인지 확인해야한다. 웹 클라이언트로 돌아가 NIC 맥주소를 확인해 메모장에 적어둔거랑 비교한다.

em0 e6:2a:78 lan // em1 e6:2a:82 wan

그럼 다시 콘솔로 돌아가 WAN은 em1이므로 em1을 입력한다. LAN도 마찬가지로 em0을 입력하면 된다.

그럼 이제 pfSense 웹 브라우저로 들어가 설정을 해야하는데, 현재 작업하는 컴퓨터로 WAN 아이피로 접속해봤자 방화벽 밖에 있으므로 접속이 불가능하다. LAN은 당연히 안된다. 그러므로 같은 대역으로 접속하는 방법뿐이다. 즉, pfSense네트워크 안에 OS를 올리고 그 OS의 브라우저로 접속하면 된다. 처음에 다운받았던 주분투를 설치하자.

네트워크는 LAN으로 설정하고 나머지는 설치 과정은 생략하겠다.

192.168.1.1로 들어가면 로그인창이 뜬다.(admin/pfsense)로 로그인하면 초기설정이 화면이 나온다.

나머지는 다음버튼을 눌러 넘어가고 위 설정만 변경해준다. Primary DNS Server에 8.8.8.8를 추가하고 Timezone에는 아시아/서울로 변경한다. 마지막 부분에 어드민 패스워드만 변경해주면 초기 설정 끝!

 


위에서 빠진 설명이 있는데 pfSense 아이피 설정부분에 WAN과 LAN의 아이피 대역이 같은 경우도 있다. 예를 들어 디링크 공유기 기본대역이 192.168.1.x 인데 pfSense의 대역도 1.x 이므로 겹치는 상황이 생긴다. 그럴땐 LAN의 대역을 변경해주면 된다. 변경 옵션은 2번이다. 간단한 영어이므로 쉽게 변경가능하다.


 

VMware tools를 사용하면 창크기에 따라 해상도가 자동으로 변경된다. 설치방법은 명령어 한줄이면 된다.

sudo apt-get install open-vm-tools-desktop

 

'공부 > 침해대응' 카테고리의 다른 글

[침해대응] 가상 환경 구축 #4 - ACL  (0) 2020.03.30
[침해대응] 가상 환경 구축 #3 - VLAN  (0) 2020.03.28
[침해대응] 가상 환경 구축 #1 - ESXi  (0) 2020.03.25
ELK 설치  (0) 2020.02.27
Sysmom tools 설치  (0) 2020.02.24

ESXi는 VMware의 vSphere Hypervisor 제품군중에 하나이다. VMware Workstation과 차이는 워크스테이션은 호스트 기반으로 윈도우나 리눅스 등 일반 운영체제에서 프로그램으로 설치되어 가상화 기술을 제공하고, ESXi는 자체적으로 시스템을 구동하여 여러 개의 운영체제를 동작할 수 있는 환경을 제공한다. 운영체제 위에서 동작하지 않고 하드웨어 위에서 작동하기 때문에 호스트 기반의 기술보다 유연하고 좋은 성능을 발휘한다.

 

비유해서 정리하자면 VMware는 'Microsoft' , vSphere는 'Office', ESXi는 'Word' 정도가 되겠다.

 

그래서 나는 ESXi 설치해서 실습용 가상 환경을 구축할 예정인데, 굳이 왜 워크스테이션을 여러개 사용해서 구축하지 않고 ESXi를 사용하냐면 무료이기도 하고 여러 가상 환경의 효율적인 자원 관리와 세부적인 네트워킹이 가능하기 때문이다. 아무튼 위에서 말한 것처럼 설치를 진행한다면 다른 컴퓨터에다가 설치해서 구동해야 한다는 소리인데 사실 어디든 설치해도 상관없다. 남아있는 컴퓨터가 있으면 좋은데 없으므로 vmware 워크스테이션 위에 설치해서 가상 환경위에 가상 환경을 구성하겠다. 

 

ESXi 설치파일은 VMware 공식 홈페이지에 가입하면 손쉽게 구할 수 있다. 버전은 6.7이며 ISO 파일이다. 워크스테이션에서 설치 과정은 생략하겠다. 

VM 하드웨어 설정

컴퓨터 사양에 맞게 CPU, 메모리, 하드용량을 설정한다. ESXi 돌리는 컴퓨터 사양은 라이젠 1600, 메모리 16기가로 구성되어 있다. 다다익램이라는 말이 여기서 필요한 것 같다. 16기가 2개 살걸...라는 후회가... 하지만 가상 환경 구축에서는 16기가면 충분하다! 하드용량은 ESXi에 여러 가지 운영체제를 설치해야 해서 500기가로 넉넉히 주었다. 이것도 한 200기가만 있어도 된다. 500기가로 설정했다고 용량을 다 차지하는게 아니라 쓰는만큼 차는거니깐 많이줘도 걱정 안 해도 된다. 네트워크는 Bridged로 설정하자. 

 

ESXi 설치 과정은 간단하다. 위에 보이는 사진부터 비밀번호 설정까지 진행하면 된다.

설치가 끝나고 재시작하면 위와 같은 화면이 뜨는데 ESXi가 실행된 것이다. 네트워크를 Bridged로 설정해서 아이피가 192.168.0.112(DHCP)로 자동으로 잡혀있다. 참고로 iptime 기본 ip대역은 192.168.0.x 이다. 아무튼 브라우저에 아이피를 입력해 접속해보자. 사용자 이름은 root이고 비밀번호는 ESXi 설치과정에 설정한 비밀번호를 입력해주면 된다.

 

이제 이 사이트에서 여러 운영체제를 올리고 설정하고 할 것이다. VM 생성에 앞서 스토리지에 운영체제 iso파일들을 업로드 하겠다.

 

탐색기 - 스토리지 - 데이터스토어 브라우저로 들어간다. 업로드 버튼을 통해 설치할 iso파일들을 올리면 된다. datastore1이라고 있는데 esxi설치할때 500기가 하드라고 보면 된다.

 

위에서부터 설명하자면 웹, DB 서버로 사용할 CentOS이다. 서버 용도로 그래픽 환경이 필요없으므로 Minimal로 다운로드하였다. 센토스 대신 우분투 서버를 사용해도 된다. pfSense는 오픈소스 방화벽이다. 방화벽 기능 말고도 여러 가지 기능들이 많다. UTM이라고 보면 된다. xubuntu는 데스크탑용으로 가볍고 무료이기때문에 사용 할 예정이다.

'공부 > 침해대응' 카테고리의 다른 글

[침해대응] 가상 환경 구축 #3 - VLAN  (0) 2020.03.28
[침해대응] 가상 환경 구축 #2 - pfSense  (0) 2020.03.25
ELK 설치  (0) 2020.02.27
Sysmom tools 설치  (0) 2020.02.24
시스몬(Sysmon) 설치  (0) 2020.02.20

alert창을 띄우려고 위와 같이 입력했더니 해당 영화를 찾을 수 없다는 문구와 함께 코드들이 보였다.

페이지 소스를 확인해보니 스크립트로 되어있고 폼 내용이 response에 입력되는것 같다. sql 인젝션처럼 중간에 작은따옴표를 넣어 질의어를 강제로 닫는것처럼 스크립트도 </script>로 강제로 닫아버리고 그 이후 원하는 스크립트 소스를 넣는다.

</script><script>alert(document.cookie)</script><script>

 

미디엄/하이 레벨에서는 htmlspectialchars 함수를 사용해 특수문자를 필터링하고 있다.

medium 레벨

'공부 > bWAPP' 카테고리의 다른 글

SQL Injection - Stored (User-Agent)  (0) 2020.03.04
SQL Injection - Stored (SQLite)  (0) 2020.03.02
SQL Injection - Stored (Blog)  (0) 2020.02.29
SQL Injection (SQLite)  (0) 2020.02.27
SQL Injection (Login Form/User)  (0) 2020.02.26

+ Recent posts