| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 | 29 | 30 |
- 클라우드 보안 기반
- sk shieldus
- DVWA#Brute#Force#Attack#Test#Kali#Linux#Medium#Level#sleep
- 모듈프로젝트
- Foxyproxy#install#setting#firefox
- Kali#Linux#Brute#Force#Attack#Test#DVWA#Hacking#Low#무차별#대입#공격#해킹
- 개인정보보호
- CERT
- 29기
- 보고서
- 클라우드 기반
- AI #취업
- DVWA#INSTALL#github#security#kali#linux
- 루키즈
- kisa #보안관제
- 쉴더스
- 클라우드기반 보안 시스템 구축/운영 실무
- rocky linux#siem#project#threat detection#soc#onpremise#ids#python#csv#pipeline#kali linux#DVWA#security monitoring
- 애플리케이션 보안 기술
- 인프라 활용을 위한 파이썬
- #루키즈
- Kali#Linux#KALI#LINUX#INSTALL#github#설치
- 모듈 프로젝트
- VMWARE#INSTALL#설치
- 기술 특강 및 OT
- 시스템-네트워크 보안 기술
- 클라우드 보안 기술
- Case Study
- sk 쉴더스 루키즈
- 모의침투
- Today
- Total
이것저것
[SK shieldus Rookies 29기] 42일차 본문
지난 번 다양한 컴플라이언스를 다루고 이제는 다시 기술적인 이야기를 할 타이밍이다. 지금부터는 아무래도 이론적인 내용보다는 실무에 초점을 맞춘 작업형 과정이 다수 포함이 되어 있어서 캡처뜨기 좀 빡셀 것 같다...
URI, URL, URN 차이 쉽게 이해하기
인터넷에서 자주 보이는 URI, URL, URN은 모두 "자원(resource)을 식별하는 방법"과 관련된 개념이다.
1. URI (Uniform Resource Identifier)
정의
- 인터넷 상의 자원을 식별하는 모든 문자열
이 주식이 뭔지 알 수 있는 모든 정보를 말함
종목명
종목코드
거래소 + 위치 정보
기타 등등
2. URL (Uniform Resource Locator)
정의
- 자원의 "위치"를 알려주는 URI
어디에 있는지 알려줌, 우리가 흔히 말하는 "웹 주소"
브라우저에 입력하는 주소 대부분이 URL
- 예시
https://www.google.com ftp://ftp.example.com/file.txt - 구성 요소
https:// www.example.com /index.html 프로토콜 도메인 경로어느 거래소에서, 어떤 방식으로 거래되는 주식인지를 생각하면 됨
NYSE 거래소, NVDA 종목 페이지 위치
3. URN (Uniform Resource Name)
정의
자원의 "이름"만으로 식별하는 URI
위치 정보는 몰라도 됨
"어디 있는지는 몰라도, 이게 뭔지는 앎"
주로 표준 문서, ISBN, 고유 식별자 등에 사용함
예시
urn:isbn:9780134685991 urn:uuid:550e8400-e29b-41d4-a716-446655440000
티커 생각하면 됨! 엔비디아: NVDA, 아마존:AMZN
이건 바뀔 일 없음.
URI는 자원을 식별하는 전체 개념이고,
URL은 위치를 알려주는 URI,
URN은 이름으로 식별하는 URI이다.


네트워크 보안
채용 공고를 잘 보면 네떡이 많은 것을 알 수가 있다. 그렇다면 네떡 엔지니어, 유지보수 등등 회사나 사람들이 왜 이렇게 네떡에 진심인지 알아보자.
네트워크는 물리적 제약이 적다, 피아 식별이 어렵다. 이 말은 공격하기는 상당히 쉽고 방어하기는 상당히 어렵다는 말이다. 그러면 사람들은 왜 네트워크를 사용하는 걸까? 그야 당연히 온 세상이 네트워크로 이미 구축되어 있으니까다. 뭐 어쩌겠나 이미 태어나보니 다 이렇게 되어 있게 이걸 바꿀만한 저기도 없고 하니깐 그냥 쓰는 거지...
방화벽
- IP/Port 기반으로 동작
- 허용 정책에 포함되지 않는 모든 IP/Port 차단
그런데 문제가 생김. 방화벽으로도 커버되지 않는 문제가 발생한다. 대표적으로 우리가 배운 웹 해킹이다.
IDS(Intrusion Detection System)
- IP/Port 상위 개념의 접근제어 필요성 대두
- 애플리케이션 레이어의 데이터 패턴을 검사하는 snort
- 패턴매칭(주고 받는 패턴으로 상호관계 파악 가능)
침입탐지모델
| 구분 | 블랙리스트 (패턴 매칭) | 화이트리스트 (이상징후 탐지) |
|---|---|---|
| 개념 | 정의된 패턴을 갖는 공격만 차단 | 정의된 패턴을 갖는 정상만 허용 |
| 기본 접근 | 알려진 공격 패턴 기반 | 정상 행위 기준선(Baseline) 기반 |
| 장점 | (알려진) 공격 정의가 쉽다 | 정상만 정의하면 된다 |
| 단점 | 알려지지 않은 공격은 탐지 불가 | 정상 범위를 정의하기 어렵다 |
| 오탐/미탐 | 미탐(false negative) 가능성 높음 | 오탐(false positive) 가능성 높음 |
| 구현 예시 | IDS, IPS, 방화벽, 웹 방화벽 | 이상징후 기반 IDS, 행위 기반 보안 시스템 |
위에 내용에 이어서 패턴매칭을 적용하여 보안관제를 실시를 했을 경우 어마무시한 로그들이 찍히는 것을 확인할 수 있다.
근데 이렇게 엄청나게 많은 로그를 어떻게 하나하나씩 다 보냐?
그러니까 더욱 더 정밀하게 룰들을 설정하고 패턴들을 설정해야한다.
앞에는 그냥 리마인드 겸 단순 몸풀기 정도이다. 이어서 할 snort도 오늘은 그렇게까지 저기 하지 않으므로 만약 기억이 안난다면 복습을 다시 하자!
우선 그냥 진행하면 권한이 막힐 수가 있기 때문에 관리자 권한으로 전환한다.
1. 관리자 권한으로 cmd창 실행 후 net user administrator /active:yes 명령어 입력
2. 기존 계정 로그아웃
3. administrator 계정으로 로그인이제 시작하자~
snort 설치를 위해서 아래와 같은 명령어를 입력하자
yum install epel-release -y
yum install wget gcc gcc-c++ libnetfilter_queue-devel git flex bison zlib zlib-devel pcre pcredevel libdnet* libpcap* nghttp2 xz-devel libtool libsfbpf* daq* -y
rpm -ivh https://snort.org/downloads/snort/snort-2.9.20-1.centos.x86_64.rpm
ln -s /usr/lib64/libdnet.so.1.0.1 /usr/lib64/libdnet.1
yum install epel-release -y이 뭐 하는 거냐면 EPEL 저장소를 추가하는 명령어임. 기본 yum 저장소에는 없는 패키지들을 설치할 수 있게 해줌. 그래서 왜 설치하냐면 snort나 기타 의존성 패키지들 중 일부가 EPEL에만 있음. 이거 없으면 나중에 패키지를 찾을 수 없습니다하면서 에러 남.
yum install wget gcc gcc-c++ libnetfilter_queue-devel git \
flex bison zlib zlib-devel pcre pcre-devel \
libdnet* libpcap* nghttp2 xz-devel libtool \
libsfbpf* daq* -y
주요 패키지 설명 (with gpt)
컴파일 도구
gcc, gcc-c++
→ C/C++ 컴파일러 (Snort는 C 기반)flex, bison
→ Snort 룰 파싱할 때 사용libtool
→ 라이브러리 빌드/링크 관리
네트워크 관련
libpcap*
→ 패킷 캡처 핵심 라이브러리 (Snort 필수)libdnet*
→ 저수준 네트워크 처리 (라우팅, 인터페이스 등)libnetfilter_queue-devel
→ Linux 커널의 netfilter와 연동 (IPS 모드에서 중요)daq*
→ Snort DAQ(Data Acquisition) 모듈
→ Snort가 패킷을 어디서/어떻게 받을지 결정함
문자열/압축 처리
pcre, pcre-devel
→ 정규표현식 처리 (Snort 룰에서 엄청 많이 씀)zlib, zlib-devel
→ 압축 데이터 처리
기타
wget
→ 파일 다운로드git
→ 소스 코드 관리nghttp2
→ HTTP/2 지원xz-devel
→ xz 압축 라이브러리libsfbpf*
→ 고성능 BPF 필터 (Snort 성능 관련)
rpm -ivh https://snort.org/downloads/snort/snort-2.9.20-1.centos.x86_64.rpm
-> 스노트 사이트에서 미리 컴파일된 RPM 패키지를 설치
ln -s /usr/lib64/libdnet.so.1.0.1 /usr/lib64/libdnet.1
-> 라이브러리 심볼릭 링크 생성(원래는 되어 있는게 맞긴 하지만 오픈소스다. 알아서 모자르면 하자.)
[root@Snort ~]# vi /etc/snort/snort.conf- 전

- 후

- 전

- 후

- 전

- 후

- 전

- 후


아래와 같은 명령어 입력할 것:548,651norm i#
그러면 이제 이렇게 바뀜
스노트 룰도 한 번 추가해주자!
alert icmp any any -> any any (msg:"ping-request"; itype:8; sid:1000000; rev:1;)
alert icmp any any -> any any (msg:"ping-response"; itype:0; sid:1000001; rev:1;)


snort -i eth1 -c /etc/snort/snort.conf -A fast

잘 잡히는 것을 확인할 수 있다.
그러면 이렇게 잡은 물고기를 그냥 두면 안된다.
DB에 저장하자! 근데 DB가 없으니까 설치 한 번 해보자
rpm -ivh https://dev.mysql.com/get/mysql80-community-release-el7-11.noarch.rpm
- MySQL 공식 YUM 저장소(repo) 를 시스템에 추가하는 명령어
yum install mysql-server mysql-devel -y
- MySQL 서버 + 개발 라이브러리 설치
service mysqld start
- MySQL 서비스 실행

정상적으로 active 된 걸 확인할 수 있다.
mysql이 버전업이 되면서 패스워드 정책이 까탈스럽게 바뀌었기 때문에 원만한 실습을 위해 조금 설정을 변경하자.
echo >> /etc/my.cnf
echo "default_password_lifetime=0" >> /etc/my.cnf
echo "validate_password.policy=LOW" >> /etc/my.cnf
echo "validate_password.length=6" >> /etc/my.cnf
echo "validate_password.special_char_count=0" >> /etc/my.cnf
echo "validate_password.mixed_case_count=0" >> /etc/my.cnf
echo "validate_password.number_count=0" >> /etc/my.cnf
echo "skip_external_locking" >> /etc/my.cnf
echo "skip_name_resolve " >> /etc/my.cnf
그리고 당연하지만 적용하려면 재시작해야 한다.
service mysqld restart
그리고 mysql을 접속할 때 비번을 입력해야 되는데 비번을 모르니까 우리가 아는 비번으로 바꾸는 작업을 시작하자. 그럴려면 초기 비번을 알아내야 한다. 초기 비번을 알아낸 뒤 no1ids로 변경을 하자.
[root@Centos7 ~]# grep "temporary password is generated" /var/log/mysqld.log | grep -oP "\S+$"
f+bQNiPd6cTg
[root@Centos7 ~]# mysql --connect-expired-password -uroot -p -e "alter user 'root'@'localhost' identified with mysql_native_password by 'no1ids';"
Enter password:
[root@Centos7 ~]#
성공했음
원격접속을 위한 세팅을 마쳤으니까 잘 되는지 한 번 확인해보자!
성공했음
원격접속을 위한 세팅을 마쳤으니까 잘 되는지 한 번 확인해보자

이제 디비를 생성하고 내용을 채워야 함

[barnyard2.conf]에서 mysql 연동하려면 설정 변경해야쥐
[root@Centos7 ~]# vi /etc/snort/snort.conf
[root@Centos7 ~]# vi /etc/snort/sid-msg.map
[root@Centos7 ~]# cat /etc/snort/sid-msg.map
1000000 || ping-request
1000001 || ping-response


[root@Centos7 ~]# barnyard2 -c /etc/snort/barnyard2.conf -d /var/log/snort/ -f alert.log -w /bar.log.snort/barnyard2.temp아까처럼 ping 192.168.56.100을 날려보자

수집한 데이터를 디비에서 보기 위해 쿼리문을 입력하자
select a.timestamp, b.sig_name
from event a, signature b
where a.signature = b.sig_id

사실 지금까지 한 건 그냥 간단한 연습임
이제는 아까 열심히 설정한 것들이 이미 설정된 파일이 snort.ova을 가지고 해보자고
이제 진짜로 snort를 불러오고 다시 해보자
[root@Snort ~]# barnyard2 -c /etc/snort/barnyard2.conf -d /var/log/snort/ -f alert.log -w /var/log/snort/by.tmp
잘 되는 것을 확인할 수 있다. 아까처럼 디비에서도 되는지 확인해보자
굳굳 잘된다!!
이제 여기서 각종 쿼리문을 조합하여 조인도 하고 테이블도 변경해가면서 원하는 컬럼값을 뽑아내면 된다.
아직까진 뭐...그냥저냥 할 만한 정도
'SK Shieldus Rookies 29' 카테고리의 다른 글
| [SK shieldus Rookies 29기] 41일차 (1) | 2026.01.17 |
|---|---|
| [SK shieldus Rookies 29기] 40일차 (0) | 2026.01.17 |
| [SK shieldus Rookies 29기] 39일차 (0) | 2026.01.17 |
| [SK shieldus Rookies 29기] 38일차 (1) | 2026.01.17 |
| [SK shieldus Rookies 29기] 37일차 (0) | 2026.01.17 |