각종 오픈소스 도구들을 이용하여 가상 보안 인프라 구축 실습을 진행한다.

가상 보안 인프라이기 때문에, 가상 머신인 VMware를 이용하여 실습을 진행하고, 네트워크 인프라 역시 VMware를 기반으로 수행할 예정이다.

우선 시나리오, 구성 및 명세, 구성도를 작성한다.

 

시나리오

- 우리 기업에서, 고객을 위한 웹 서비스를 운영할 방침이다. 동시에 사내 보안 인프라까지 구축할 생각이다.

- 운영을 위한 서버에는 내부망, 외부 DMZ망이 존재한다.

- 직원 PC와 내부망은 외부와의 통신을 단절한다.

- 직원 PC에는 위협 탐지를 위해 HIDS를 운영한다. 이상 여부 확인 서버를 구축한 후, 위협 모니터링도 진행할 예정이다.

- 외부 DMZ망에는 웹 서버가 존재한다. 해당 서버에는 개발자가 업무망에서만 접근 및 개발 수정이 가능하도록 지정하고, 나머지 접근은 차단한다.

- 웹 서버에서는 외부와 웹 서비스(HTTP)만 통신이 가능하다.

- 인프라는 화이트리스트 방식으로 구축한다. 또한 DMZ망 영역에 존재하는 서버들은 중앙에서 방화벽에 의한 통제를 받아 처리한다. 또한 방화벽이 핵심 백본 통신망으로 구성되어, 적절한 관리 통제를 실시해야 한다.

- 방화벽의 접근 통제는 오직 관리자에 의해서만 접근 및 수정이 가능하며, 이외의 연결은 허용되지 않는다.

 

인프라 구성

- 방화벽, IPS, 개발자 PC, 관리자 PC, 웹 서버, HIDS 관리 서버(Endpoint Management Server)

- 통신망의 경우 외부 DMZ망, 내부망, 오피스망으로 구분한다.

- 각 통신은 최소한의 원칙에 따라 구성되도록 하며, 필요하지 않은 보안 정책은 차단하여 접근 통제를 수행한다.

- 직원 PC의 경우 윈도우, 서버의 경우 리눅스를 사용할 예정이다.

- HIDS 관리 프로그램은 오픈소스 프로그램인 Wazuh를 사용한다.

- 방화벽은 오픈소스 프로그램인 Untangle을 사용한다.

- IPS는 오픈소스 프로그램인 Suricata를 사용한다.

 

인프라 구성 명세

No. 가상 이미지 사용 구분 운영체제 자원(RAM) 네트워크 위치 VMnet IP대역 IP주소
1 Firewall 방화벽 Debian
(Untangle)
2GB Office Zone 192.168.30.0/24 192.168.30.1
2 Internal DMZ 192.168.40.0/24 192.168.40.1
3 IPS Zone 192.168.50.0/24 192.168.50.1
4 WAN 192.168.10.0/24 192.168.10.150
5 개발자PC PC Windows 7 1GB Office Zone 192.168.30.0/24 192.168.30.100
6 관리자PC PC Windows 7 1GB Office Zone 192.168.30.0/24 192.168.30.200
7 HIDS 관리 서버 Server Ubuntu 20.04
(Wazuh)
4GB Internal DMZ 192.168.40.0/24 192.168.40.3
8 IPS IPS CentOS 6.9
(Suricata)
2GB IPS Zone 192.168.50.0/24 192.168.50.2
9 External DMZ 192.168.60.0/24 192.168.60.1
10 웹 서버 Server Ubuntu 20.04 1GB External DMZ 192.168.60.0/24 192.168.60.3

 

 

인프라 구성도

보안 인프라 구성도

반응형

기사 원문

www.boannews.com/media/view.asp?idx=96296

 

다크웹에서 입소문 나고 있는 악성 문서 생성 서비스, 에터사일런트

다크웹에서 새로운 범죄 서비스가 발견됐다. 악성 마이크로소프트 워드 문서를 제작해 주는 것으로, 공격자들이 여전히 오피스 소프트웨어의 매크로를 적극 활용하고 있다는 사실을 보여준다.

www.boannews.com

 

"다크웹에서 새로 생겨 입소문이 퍼지고 있는 서비스가 있다. 악성 매크로가 심겨진 워드 문서를 만들어주는 서비스로, 효과 좋고 가격도 낮아 인기가 점점 높아지고 있다. 이건 단순히 이 서비스 하나의 문제가 아니다. 다크웹이 범죄자들이 살 만한 곳으로 변하고 있다는 뜻이다." - 기사 中...

 

기사에서는 최근 다크웹에서 발견된 새로운 범죄 서비스에 대해서 이야기하고 있다. 워드 문서를 만들어 주는 서비스인데, 내부에 매크로를 사용하여 악성 문서를 제작하는 사이트이다. 보안 업체인 인텔 471에서 해당 보고서를 발표하였다. 이 서비스의 이름은 애터사일런트라고 하는데, 도큐사인 문서인 것처럼 보이지만, 악성 매크로를 내포하거나 이미 공개된 취약점에 대한 익스플로잇이 감춰져 있는 형태로 악성 문서가 제작된다고 기사에서 밝히고 있다.

다행스럽게도 많은 조직에서 매크로를 금지하고 있지만, 이러한 서비스 성행의 이유는 결국 당하는 사람이 존재하기 때문이다. 실제로 필자가 군에서 업무를 볼 때도 사무 자동화를 위하여 VBA, VBS를 이용한 매크로 서비스를 자주 사용하였고, 만약 해당 PC에 악성 매크로 파일이 잠입한다면 거대한 문제를 일으킬 수 있었을 것이다.

하지만 이러한 자동화 도구 자체를 금지할 수는 없는 노릇이다. 해당 문제점을 어떻게 해결해야 할까? 소프트웨어 개발사 역시 해당 기능들의 약용 가능성에 대해 알고 있기 때문에 나름대로의 보안 설정을 통해 매크로 기능이 바로 실행되지 않도록 방지하고 있다. 또한, 매크로 프로그램 역시 일종의 프로그램으로 판단해야 하고, 내부에서 제작하거나 외부에서 매크로를 만들어서 들여올 경우에도 보안성 검토를 필히 받아야 한다.

기사에서는 에터사일런스가 시그니처 기반 탐지 기술을 회피할 수 있도록 다양한 변종 제작도 가능하다는 것을 언급하고 있다. 또한 해당 서비스는 사이버 범죄 산업 내에서 해킹 도구, 공격 도구가 얼마나 흔히 거래되는지를 보여주기도 한다. 따라서 사이버 범죄는 더욱 활성화 될 것이고, 이러한 상황 속에서, 보안에 대한 투자는 필수적이다.

아무리 단단한 벽을 세우더라도, 빈틈이 존재한다면 해당 빈틈을 뚫고 공격할 수 있다. 따라서 단기간의 투자가 아닌, 장기적인 관점에서 꾸준히 모니터링하고, 지속적인 관심을 보이는, 보안에 대한 새로운 문화가 정착해야 한다.

반응형

원본 기사

www.boannews.com/media/view.asp?idx=96071

 

[황민주의 보안에세이] ‘양치기 소년과 늑대’ 이야기의 교훈, 거짓말하면 안 된다?

보안은 ‘취약성’과의 싸움이다. 전쟁의 양상과 비슷하다. 상대의 취약한 점을 찾기 위해 벌어지는 치열한 ‘정보전’이 전쟁의 시작이다. 상대의 약점을 알고 나면 승리의 7부 능선을 넘어섰

www.boannews.com

 

이 기사를 보면서 새로운 인사이트를 가질 수 있었다. 단순히 양치기 소년의 거짓말이 문제였던 게 아니라, 결국 문제점을 파악하지 못하고 상황에 안일해졌던 주민들도 문제는 아니었을까? 기사에서 말하듯이, 오탐이 발생했으면 이후에는 같은 일이 발생하지 않도록 방법을 강구해야 했다. 실질적인 조치가 필요하다는 것이다. 또한 늑대에 대한 경보의 가치에 대해 생각했어야 하는데, 경보의 가치가 마을 주민들 모두에게 위험이 될 수 있는 문제였다면, 주민들도 한번 더 고려했을 것이라고 말한다.

기업에서의 보안도 결국 이와 비슷하게 생각할 수 있다. 각종 위험이 존재하고, 경제적 손실이 있지만, 보안에 대한 중요성은 잠시만 부각될 뿐, 실질적인 방법을 강구하지는 않고 있다. 단순히 현재의 경제적 손실에만 집중하고, 보안에 대한 투자로 인한 추후의 손실 방지에는 깊은 고려를 하지 않는 것이다. 위의 사례에서도, 결국 귀찮아진(단순한 손해가 발생) 마을 주민(실질적 관리자)들은 인해 양치기 소년(보안 대책)에게 더이상 투자를 더 하지 않았고, 이는 결국 마을 전체로 보았을 때 큰 손해로 다가오게 되었다.

이때 마을 주민들이 지켜야 할 것이 무엇인지, 그리고 이 가치가 어느 정도인지를 먼저 파악했다면 상황이 조금 더 달라지지 않았을까? 그리고 이를 지킬만한 충분한 안전장치가 되어 있는지 다시 점검했다면, 즉 양치기 소년에게 자신의 임무에 대해 잘 인식시켜 주고, 손해가 발생했더라도 지속적으로 문제를 해결해 왔다면 큰 문제가 발생하지는 않았을 것이다. 이는 결국 기업의 보안 문화와 직접적으로 비유될 수 있다. 사소한 문제, 사소한 손해일지라도, 그 문제점을 지속적으로 해결해 왔는지는 추후 큰 문제를 막을 수 있는 발판이 된다. 이러한 당연한 것들을 지키는 사회가 보안 강국을 만들지 않을까 싶다.

반응형

Abex's crackme 5번 문제이다.

crackme5.exe
0.01MB

 

프로그램 실행 창 1
시리얼이 틀렸다.

프로그램을 실행시켜 보면, 시리얼을 넣으라는 창이 뜨고, 아무 값이나 넣어 보니 시리얼이 틀렸다고 하며 프로그램 실행이 종료된다. 시리얼을 찾는 문제라고 판단하고, 디버깅을 시작하였다.

디버그 시작

해당 프로그램의 경우, 시스템 콜 위주로 이루어져 있어서 분석이 용이하였다. 우리가 확인했던 메시지박스의 스트링을 기준으로 분기문을 찾아 가면서 프로그램을 분석해 본 결과, 내가 넣어 준 값과 특정 스트링이 비교되고 있는 것을 확인할 수 있었다.

분기 찾기

비교해주는 시스템 콜에서 사용한 스트링인 L2C-57816784-ABEX를 시리얼 값에 넣어 준 결과, 프로그램이 정상 수행되고 종료되는 것을 확인할 수 있었다.

Success!

 

반응형

'Security > ISANG' 카테고리의 다른 글

[Reversing] abex's crackme #4  (0) 2021.03.29
[Reversing] abex's crackme #3  (0) 2021.03.29
[Reversing] abex's crackme #2  (0) 2021.03.29
[Reversing] abex's crackme #1  (0) 2021.03.28

Abex's crackme 4번 문제이다.

실행 파일을 켜 본 결과, 값을 넣는 창과 registered라는 버튼이 잇는데, 해당 부분이 활성화가 되지 않는다.

???

해당 프로그램에서는 별도의 단서를 얻을 방법이 없어 보여서, 디버깅을 수행해 보았다.

MSVBVM60

디버깅을 수행했는데, 어디서 많이 보던 형태이다. crackme #2와 같이, 비주얼 베이직 형태의 프로그램이다. 따라서 해당 프로그램도 지난번 문제처럼 이벤트 핸들러를 찾는 것이 관건이 될 것 같다.

스트링 탐색

우선 스트링을 기반으로 탐색을 수행해 보았다. 스트링을 탐색해 본 결과, 아래와 같은 스트링이 보이는데, 해당 스트링 부분이 정상적으로 프로그램을 실행시켰을 때 발생하는 메시지박스일 것으로 추측된다. 따라서 해당 부분으로 이동하고, 상단으로 이동해서 스택 프레임 부분을 통해 이벤트 핸들러를 찾아 주었다.

이벤트 핸들러 부분

해당 위치를 기반으로 분석을 진행해 보았는데, 프로그램의 실행 루틴이 해당 이벤트 핸들러 부분으로 돌아오지 않았다. 그 이유를 생각해 본 결과, 해당 이벤트 핸들러는 시리얼 넘버가 정답일 시 활성화되는 Registered 버튼이 클릭되었을 때 수행되는 이벤트 핸들러로 보인다. 따라서 해당 주소의 함수 부분을 호출하는 부분을 찾아 보았다.

JMP문 확인

Find reference 기능을 통해 00401E10 부분을 호출하는 부분을 찾을 수 있었다. 그러나 해당 부분을 찾아가 본 결과, 별다른 소득 없이 단순 점프문만 나열되어 있는 것을 볼 수 있었다.

다른 방법으로의 접근이 필요한 것 같았다. 그래서 클릭을 한 뒤에 나타나는 이벤트 핸들러가 아닌, 문자를 넣는 과정에서 꾸준한 비교 연산이 있어야 클릭이 활성화 되는 이벤트가 발생할 수 있을 것이라는 판단 하에, 스트링을 비교해주는 이벤트 핸들러 부분을 찾아보기로 했다. 그래서 모든 함수 호출들을 확인해 보았다.

StrCmp 확인

확인 결과 strcmp와 유사한 형태의 호출이 존재하는 것을 확인할 수 있었다. 그래서 해당 부분에 브레이크포인트를 주고, 프로그램을 실행시켜 보았다.

StrCmp 호출 코드 세그먼트
스택 부분

그 결과, 스트링을 비교하는 이벤트 핸들러를 찾을 수 있었고, 해당 부분에서 비교해주는 값의 스택을 확인해 보니 2031105라는 값을 확인할 수 있었다. 해당 값을 넣어 주니 Registered 버튼이 활성화되었고, 프로그램이 정상 실행되었다.

Success!

반응형

'Security > ISANG' 카테고리의 다른 글

[Reversing] abex's crackme #5  (0) 2021.03.29
[Reversing] abex's crackme #3  (0) 2021.03.29
[Reversing] abex's crackme #2  (0) 2021.03.29
[Reversing] abex's crackme #1  (0) 2021.03.28

Abex's crackme 3번 문제이다.

crackme3.exe
0.01MB

프로그램을 실행시키면, 키파일이 있을 경우 OK를 누르라고 한다.

키파일??
파일을 찾을 수가 없다

그래서 그냥 OK를 눌러보면, 파일을 찾을 수가 없다고 뜨면서 프로그램이 종료된다. 프로그램 내부에서 인식되는 파일이 존재해야 넘어가는 구조인 것 같다. 디버깅을 수행해 보았다.

코드 부분이 매우 짧은 편이다. 전반적으로 시스템 콜도 간단한 것 위주로 사용되어서, 분석이 용이한 편이었다.

프로그램을 쭉 분석하면 CreateFileA라는 시스템 콜과, GetFileSize라는 시스템 콜이 눈에 띈다. 이 두 시스템 콜을 확인해 본 결과, CreateFileA라는 시스템 콜은 인자로 받은 파일의 포인터를 반환한다. 프로그램의 흐름을 확인해 보면, abex.l2c라는 이름의 파일의 포인터를 받고, 이를 GetFileSize라는 시스템 콜의 인자로 다시 넣어주는 것을 확인할 수 있다. GetFileSize라는 시스템 콜은 파일의 크기를 리턴한다. 이를 12와 비교하고, 00401049 주소 부분의 JNZ를 통해 분기를 수행한다.

따라서 해당 프로그램은 abex.l2c라는 이름의 파일이 키 파일이 된다. 이때, 비교해주는 12라는 값이 16진수 값이기 때문에 10진수 값으로는 18에 해당한다. 따라서 18바이트의 파일을 crackme #3와 같은 경로에 만들어 주면 프로그램이 정상적으로 수행된다.

18바이트 크기의 abex.l2c 파일을 만들어준다
Success!

 

반응형

'Security > ISANG' 카테고리의 다른 글

[Reversing] abex's crackme #5  (0) 2021.03.29
[Reversing] abex's crackme #4  (0) 2021.03.29
[Reversing] abex's crackme #2  (0) 2021.03.29
[Reversing] abex's crackme #1  (0) 2021.03.28

+ Recent posts