360 likes | 498 Views
Wheel seminar 보 안. SPARCS 11 undead. 보안이란 ?. 허가되지 않은 사용자의 접근 제한 허가되지 않은 사용자의 root 권한 획득 및 오남용 방지 위와 같은 일이 일어나지 않게 하는 것 ( 중앙일보 ) … 말로는 참 쉽다. 보안을 유지하지 못하면 ?. YU 모씨 사건 2011 년 말 YU 모씨가 우리 학교를 목표로 활동하기 시작 . 교내에 설치된 Zeroboard 4 의 보안 취약점을 사용하여 웹셸 및 백도어 설치
E N D
Wheel seminar보안 SPARCS 11 undead
보안이란? • 허가되지 않은 사용자의 접근 제한 • 허가되지 않은 사용자의 root 권한 획득 및 오남용 방지 • 위와 같은 일이 일어나지 않게 하는 것 (중앙일보) • …말로는 참 쉽다.
보안을 유지하지 못하면? • YU모씨사건 • 2011년 말 YU모씨가 우리 학교를 목표로 활동하기 시작. • 교내에 설치된 Zeroboard 4의 보안 취약점을 사용하여 웹셸 및 백도어 설치 • ssh데몬을 변조하여 사용자가 키보드로 입력한 암호를 저장함 • 이를 숨기기 위해 libc를 후킹하여 해커가 만든 디렉터리와 파일을 숨김 • 이렇게 얻은 ID/PW로 다른 컴퓨터에 접속하기 시작 • 대부분의 사용자들의 ID/PW는 여러 머신에서 같고, 특히 일부 sudo권한을 가진 경우도 있음 • 위 과정을 반복하다 remote root login이 허용되어 있으면 success! • 멍청한 YU모씨가 SPARCS 서버에 떠 있었던 IRC 대화방 발견 • 자신의 업적을 자랑함 • 트위터를 통해 네덜란드 모 기업에 제보 • YU모씨 검거 ㅋ
칩입자의 특성 • The Curious: 어떤 시스템과 데이터를 가지고 있는지 정도를 알고자 하는 것에 흥미를 둔다. • The Malicious: 시스템을 다운시키거나 웹페이지를 손상시켜 손해를 복구하게 하는 등으로 시간과 돈을 낭비하게 만듦. • The High-Profile Intruder: 인기와 악명. 잘 알려진 시스템에 침투해서 능력을 과시하고자 함. • The Competition: 시스템이 무슨 데이터가 있는지, 돈이 될만한 무언가를 가지고 있다고 생각함. • The Borrowers: 시스템을 무단 사용해서 시스템 자원을 훔침. 채팅, IRC 서버, 아카이브 사이트,DNS 서버등을 돌릴 수도 있다. • The Leapfrogger: 다른 시스템에 들어가기 위한 도구로서 시스템을 사용. 많은 수의 호스트에 연결되어 있거나 게이트웨이로 사용되는 경우 주의 필요.
물리적인 보안 • 누가 컴퓨터 본체에 손을 댈 수 있는가? • 그럴 필요가 있는 사람인가?
xlock & vlock xlock: • X 윈도우 화면을 잠근다. • 패스워드가 입력되어야만 화면을 입력 가능 상태로 되돌릴 수 있다. vlock: • 리눅스 가상 단말기의 일부나 전부를 잠근다. • 본인이 작업 중인 단말 하나 만을 잠글 수 있다 • 본인의 작업이 조작되는 것을 막을 수는 있지만, 리부팅이나강제종료, 네트워크 크래킹 등을막을 수는 없다. …라는 문서를 찾았으나 SPARCS에서 사용하는지는 잘 모르겠음;;
가상 사설망(VPN) • 공중 네트워크를 통해 한 회사나 몇몇 단체가 내용을 바깥 사람에게 드러내지 않고 통신할 목적으로 쓰이는 사설 통신망이다. • 간단하게 외부에서 가상 사설망을 통해 접속하면 인트라넷에 로컬에서 직접 접속한 것처럼 해줌. • 보안을 위해 특정 포트를 차단함! • 스팍스 서비스에 문제가 될 수 있음
(Distributed) Denial of Service • 사용자가 인터넷에서 평소 이용하던 자원에 대한 서비스를 더 이상 받지 못하게 되는 상황. • 버퍼 오버플로우 • SYN • 눈물방울 • 스머프 • 바이러스 • 물리적 공격 (케이블 절단) 등의 공격형태가 있다.
TCP SYN Flooding SYN_SENT ACK SYN_RECEIVED ACK/SYN ESTABLISHED ACK ESTABLISED <정상적인 3-way handshaking 연결>
TCP SYN Flooding ACK ACK/SYN 안보낼건데? ㅋ 계속 기다려라 ㅋㅋ SYN_RECV 기다리는 중… ACK <Backlog Queue>
TCP SYN Flooding • 예방 방법: 1. Backlog Queue를 적절하게 늘려준다. 확인: #sysctl-a | grepsyn_backlog 증가: #sysctl –w net.ipv4.tcp_max_syn_backlog=[value] 2. Syncookies기능을 켠다. 3-Way Handshakig의 과정을 변경한다. TCP Header의 특정 부분을 뽑아내어 암호화하는 방식으로 3-WH이 성공적으로 이루어지지 않으면 더 이상 소스 경로를거슬러 올라가지 않게 한다. 확인: #sysctl –a | grepsyncookie 활성: #sysctl –w net.ipv4.tcp_syncookies=1
netstat • netstat: 현재 연결된 목록을 프로토콜과 함께 보여줌. • -a: 연결을 기다리는 목록도 보여줌 • -n: 컴퓨터 이름 대신 ip주소가 뜸 • -p: 프로그램 ID와 이름을 보여줌 • -nap: 궁극체
iptables • 강력한 패킷필터링 툴 • 사실 일은 iptable이 하는게 아니라 netfilter라는 툴이 한다. • iptable의 역할을 netfilter의 룰을 세워준다.
iptables iptables : chain(net filter) -INPUT chain : 로컬로 들어오는 패킷이 통과 - OUTPUT chain : 로컬에서 나가는 패킷이 통과 - FORWARD chain : 로컬을 경유하는 패킷이 통과 Packet
iptables 룰과 관련된 옵션 • -A <chain> <rule>체인에 새로운 규칙을 추가한다. • -I <chain> <rulenum> <rule>체인의 rulenum 지점에 규칙을 삽입한다. • -R <chain> <rulenum> <rule>체인의 rulenum지점에 규칙을 교환한다. • -D <chain> <rulenum/rule>체인의 rulenum에 있는 rule이나 rule을 지운다.
iptables 체인과 관련된 옵션 • -P <chain> <action> chain의 기본 정책을 action으로 변경한다. • -F <chain> chain의 규칙들을 지운다. • -Z <chain> chain 내의 카운터를 0 바이트로 만든다. • -L <chain> chain 의 모든 규칙을 보여준다.
iptables 패킷의 출처,목적지 제어 • -s : 패킷의 출처 IP를 지정한다.ex) # iptables –A INPUT –s 192.168.10.10 -j DROP • -d : 패킷의 도착지 IP를 지정한다.ex) # iptables –A INPUT –d! 192.169.10.12 -j DROP • 도메인, 네트워크 또는 집단으로도 지정할 수 있다. • ! 옵션을 사용할 수 있다.
iptables 프로토콜 제어 • -p : 프로토콜 지정ex) # iptables –A INPUT –p TCP –j ACCEPT • -p 옵션의 인자는 TCP, UDP, ICMP가 있다. • --sport : 패킷의 출발지 포트 지정 • --dport : 패킷의 도착지 포트 지정 포트 제어
iptables • # iptables –A INPUT –p tcp --dport 80 –j DROP • --sport나 --dport의 인자로 서비스명을 적는 것도가능하다. ex) --sport www • 여러 포트를 지정할 경우--sport 1024:24546과 같이 지정 가능하다.
iptables 인터페이스 지정 • -i (input interface)ex) # iptables –A INPUT -i eth0 –j DROP • -o (output interface) • INPUT 체인에는 -i, OUTPUT 체인에는 –o 옵션만 사용할 수 있고 FORWARD 체인에는 둘 다 사용 가능하다.
iptables 패킷 처리 지정 • -j ACCEPT : 패킷의 이동을 허락 • -j DROP : 패킷의 이동을 거부 • -j QUEUE : 패킷을userspace program으로 처리하도록 보냄 • -j RETURN : user-defined 체인의 경우에는 기본 체인으로 보내고 기본 패킷의 경우에는 기본 정책을 따르도록 한다. • -N : 새로운 체인 생성, -X : 체인 제거
Ping test • 네트워크 세미나에서 ping을 함부로 보내면 웹사이트에 대한 공격으로 간주되어 차단당한다는 내용을 기억하는가? • 공격을 당하느니 그냥 ping에 응답을 하지 않으면 된다. #cd /proc/sys/net/ipv4 #echo 1 > icmp_echo_ignore_all 응답하게 하고 싶다면, #echo 0 > icmp_echo_ignore_all
SQL Injection • 서버나 OS의 구멍을 이용한 해킹방법이 아닌 웹 어플리케이션 자체의 버그를 악용하는 형태의 웹 해킹 방법 • 웹 페이지를 통해 입력된 parameter 값을 이용하여 쿼리를 재구성한다.
SQL Injection 흔한_SQL_Injection_공격법.txt: • 관리자 계정을 알아낸다. • 회원가입 시 제공되는 ID 중복체크 • 로그인 창과 비밀번호 창에 SQL 구문을 넣어 Injection 시도 • Select * From TABLE_NAME Where MemberID = ‘ID’ AND PASSWORD = ‘PASSWORD’
SQL Injection • 으앙ㅠㅠ쥬금.jpg
SQL Injection 방어법: • 단순히 사용자에게 저런 입력을 받지 않으면 된다. • SQL 서버의 에러 메시지를 사용자에게 보여주지 말자. • 이를 통해 DB의 TABLE 이름 등 여러 값들을 알아낼 수 있다. • Django는 기본적으로 SQL Injection에 대한 보안 요소가 포함되어 있지만 언제나 방심은 금물이다.
nmap • 포트 스캐닝 툴 • # apt-get install nmap • &nmaplocalhost • &nmap <server ip> • 멋모르고 스캐닝 때렸다가 공격으로 간주되어 차단당한다. • & cat /etc/services | grep <port> | grep <service_name>
fail2ban • 로그인을 일정 횟수 이상 실패할 경우 일정 기간 동안 차단하는 툴. • Ssh등에 무작위로 로그인하는 프로그램에 대한 대응책 • # apt-get install fail2ban • 설정, 설정을 하자! • # vi /etc/fail2ban/jail.conf • 실행은 # /etc/init.d/fail2ban start • 정지는 # /etc/init.d/fail2ban stop
fail2ban # /etc/fail2ban.conf enabled = true || false (fail2ban적용 on/off) port = (해당되는 서비스의 포트 혹은 이름) filter = (서비스의 필터) logpath = (fail2ban 로그가 저장되는 곳) maxretry = (실패 최대 횟수) bantime = (접속 거부 시간/단위 : 초) ignoreip = (접속자에게 거부가 될ip주소) 혹은 (CIDR mask) 혹은 (DNS host) destemail = (fail2ban 메세지를 받을 관리자의 이메일)
logcheck • 로그파일이나 시스템 파일은 침입자의 흔적이나 시스템의 오류사항에 대해 분석할 때 매우 중요한 자료로 사용된다. • last • # apt-get install logcheck • lastlog • lastb
끝맺는 말: 보안 수칙 • 간단하거나 추측하기 쉬운 비밀번호는 피하도록 한다. • 꼭 필요하지 않은 이상 root 계정으로의 로그인을자제한다. • 비밀번호는 공유하지 않는다. • 바이너리 설치 파일을 맹신하지 않는다. • 로그 파일을 잘 활용한다. • 시스템을 최신 버전으로 유지한다. • 소프트웨어적인 보안 뿐만 아니라 물리적인 보안에도 주의를 기울여야 한다. 6번만 잘 지켜도 웬만한 건 다 예방된다.
좋은 참고 자료 • http://wiki.kldp.org/HOWTO/html/Security/Security-HOWTO.html#toc2
…은 fake! 휠장이 미쳐 날뜁니다