320 likes | 512 Views
Security. SPARCS 10 김민규. Security for Wheel. System Admin 의 입장에서 알아야 할 것들 DDoS 등 공격 차단 netstat iptables 서버 설정 제대로 하기 Apache Authorization Bypass 시스템 권한 취약점 관리 setuid bit System security. Dos / DDoS Attack. DoS / DDoS attack. (Distributed) Denial of Service 서비스를 뻗게 만드려는 시도를 총칭
E N D
Security SPARCS 10 김민규
Security for Wheel • System Admin의 입장에서 알아야 할 것들 • DDoS등 공격 차단 • netstat • iptables • 서버 설정 제대로 하기 • Apache Authorization Bypass • 시스템 권한 취약점 관리 • setuid bit • System security
DoS /DDoS attack • (Distributed) Denial of Service • 서비스를 뻗게 만드려는 시도를 총칭 • 공격에 다수의 시스템이 사용되면 DDoS • SYN Flood, Ping Flood등 다양한 공격 방법
SYN Flooding • TCP 3-way Handshake • C: How are you? • S: I’m fine, and you? • C: I’m fine too. • SYN Flood • A: How are you? • S: I’m fine, and you? • A: … • C: How are you? • S: … (Waiting for A)
netstat • netstat –an • -a : listening/ non-listening socket 둘다 표시 • -n : host를 숫자로 표시 • SYN Flooding공격을 받고 있다면매우 많은 양의 SYN 패킷이 보임 • Host를 확인해서 차단!
iptables • Administration tool for IPv4 Packet & NAT • Firewall 역할 • 패킷에 대한 규칙을 설정할 수 있다.
iptables : chain • iptables는 커널이 가진 netfilter를 세팅 • netfilter에는 세가지 chain이 있다. • INPUT chain • local system으로 들어오는 패킷이 통과 • OUTPUT chain • local system에서 나가는 패킷이 통과 • FORWARD chain • local system을 경유하는 패킷이 통과
iptables: options • -A <chain> • <chain>에 룰을 추가한다. • -s <ip> • 패킷의 source가 <ip> 인 패킷에 대해 적용 • -d <ip> • 패킷의 destination이<ip> 인 패킷에 대해 적용 • -p <protocol> • 패킷의 protocol이 <protocol>인 패킷에 대해 적용
iptables: options • --sport <port> • 패킷의 출발지 포트가 <port>인 패킷에 대해 적용 • --dport<port> • 패킷의 도착지 포트가 <port>인 패킷에 대해 적용 • -i <device> • input device가 <device>인 패킷에 대해 적용 • -o <device> • output device가 <device>인 패킷에 대해 적용
iptables: options • -j <command> • 앞의 조건에 만족하는 패킷의 처리 방법을 결정 • ACCEPT : 패킷의 이동을 허가 • DROP : 패킷의 이동을 거부 • QUEUE / RETURN • 더 자세한 옵션은 man iptables에!
iptables : example • # iptables–A INPUT –p TCP –i eth0–s 192.168.1.13 –sport 10 –dport 80-j DROP • device eth0에 오는 패킷 중 192.168.1.13의 10번포트에서 출발해, 80번 포트로 들어오는 모든 패킷을 거부
Apache Authorization :Settings • httpd.conf • <Directory "/var/www/html">…AllowOverrideAuthConfig…</Directory> • htpasswd도구를 사용해 passwdfile을 만든다 • htpasswd –c <filename> <username>
Apache Authorization :Settings • httpd.conf또는 .htaccess에 추가 • AuthType BasicAuthName<Auth Name>AuthUserFile <passwdfile path><Limit GET POST> Require valid-user</Limit> • 매우 많은 페이지가 위와 같이 설정되어 있다.
Apache Authorization :Limit Option • Limit 옵션에 설정한 프로토콜에 대해서만 아래의 검사를 실행 • 그 외의 프로토콜로 접근하면 인증을 하지 않는다. • 인터넷에 Apache 인증 예시로 저런 방식의 구현이 많이 퍼져버려서 생긴 취약점
Apache Authorization :Bypass • http://webhacking.kr/challenge/web/web-09/index.php
Apache Authorization :Solution • AuthType BasicAuthName <Auth Name>AuthUserFile <passwdfile path>Require valid-user • Limit Option은 정말 필요할 때 아니면 아예 빼자
setuid • chmod +s 옵션으로 setuid bit를 설정 가능 • ls –al 했을때 권한 칸에 s가 보인다. • setuid bit가 있는 프로그램은 실행시 파일의 소유자의 권한을 갖게 된다.
Goal of System Exploit • main(){setreuid(geteuid(),geteuid());setregid(getegid(),getegid());execl(“/bin/sh”,0);} • setuid bit가 걸린 프로그램이 실행 도중에 저걸실행하면 소유자의 권한을 갖는 shell 획득
Way of System Exploit • Buffer Overflow Attack • System Call Vulnerablity • Format String Bug • Double Free corruption
Buffer Overflow Vulnerability • 버퍼의 크기를 확인하지 않고 값을 덮어쓰는 경우에 발생 • strcpy 함수에서 가장 많이 발생하는 취약점 • 함수의 return address를 덮을 수 있다
Buffer Overflow Vulnerability:Example • bof.c • vuln함수에서 버퍼 크기를 생각하지 않고 strcpy를 사용
Buffer Overflow Vulnerability:Example • ebp+4 : 함수의 return address • 어셈블리코드 leave, ret를 실행하면 ebp+4 의 주소에 있는 코드로 돌아간다. • ebp+4의 값을 바꾸면 어떻게 될까? • shellcode를 환경변수에 올리고ebp+4의 값을 환경변수의 주소로
Buffer Overflow Vulnerability:Solution • 버퍼 크기 체크 • 가장 확실한 Solution • strcpy, gets 등 크기를 생각하지 않는 함수 자제 • strncpy • 스택 상에서 실행권한 제거 • /etc/system 파일 편집 • set noexec_user_stack=1set noexec_user_stack_log=1 항목 추가 • 우회할 수 있는 exploit이 존재하지만좋은 예방책이 될 수 있다.
System Call Vulnerability • 일단 예시를 봅시다. • 뭐가 문제일까요?
Environment Variable: PATH • system(“clear”) => /usr/bin/clear • wiki@sparcs:~/vuln$ env...PATH=/SPARCS/bin:/var/lib/gems/1.8/bin:/usr/local/bin:/usr/bin:/bin:/usr/games... • PATH에 있는 순서대로 명령어를 찾는다.
System Call Vulnerability:Exploitation • euid로 shell을 실행하는 프로그램을 구현 • 프로그램 이름을 clear로 바꿈 • 환경변수 PATH 가장 앞에 경로 추가 • 취약점이 있는 프로그램을 실행
System Call Vulnerability:Solution • System함수의 인자에 상대경로가 들어가면 PATH변수등의 조작으로 원하지 않는 실행이 일어날 수 있다. • System함수의 인자는 절대경로로 사용 • Ex) /usr/bin/clear • 프로그램 실행시 PATH환경변수를 지우기도 한다.
Things to Remember • 유저가 보내는 정보를 믿지 말자 • 입력값에 대한 철저한 검사는 필수! • 보안상 위험한 기능은 꼭 필요할 때만 쓰자 • .htaccess / setuid등 • 최신 버전을 유지하자 • 구버전의 경우 취약점이 있었다가 패치된 경우도 많다
Thank you for Listening synthdnb@gmail.com