| At line 1 added 436 lines |
| [{TableOfContents}] |
|
|
|
| !!!Bind Install |
| *[리눅스에서 Bind 설치|Bind_Install_Linux] |
|
| !!!White Domain |
| *[kisarbl 화이트 도메인 등록|http://www.kisarbl.or.kr] |
|
|
| !!!DNS Server 관련 링크 |
| *[김정균님의 BIND 관련 문서|http://oops.org/?t=lecture&s=bind9] |
| *[윈도우 2000 DNS 설치 및 구성|http://blog.naver.com/akan1977?Redirect=Log&logNo=40024942625] |
|
|
|
|
|
|
| !!!dig |
| {{{ |
| dig @nods.ods.or.kr ods.or.kr axfr |
| }}} |
|
| !!!nslookup |
| {{{ |
| nslookup www.daum.net |
| }}} |
|
|
|
|
|
|
|
|
|
| !!!DNS 보안관련 링크 |
| *[DNS Zone 전송 차단하기 | http://blog.naver.com/lemonaroma98?Redirect=Log&logNo=60018852862] |
| *[BIND Statistics|http://blog.naver.com/gmmore?Redirect=Log&logNo=140027280763] |
| *[DNS Cache Poisoning|http://blog.naver.com/lemonaroma98?Redirect=Log&logNo=60022468542] |
|
| !!! DNS 보안관련 정리 |
| {{{ |
| 존 트랜스퍼 |
| 문제점 |
| ZONE Transfer를 이용해 DNS서버의 너무 많은 정보를 얻음으로써 크래킹에 사용될 수 있다. |
| |
| dig 도메인 axfr |
|
| 해결 방안 |
| named.conf의 options항목에 allow-transfer 항목을 추가하여 특정 서버만 zone transfer 할 수 있도록 수정 |
| options { |
| allow-transfer { 192.168.1.30; 192.168.1.20; }; |
| }; |
|
|
| DOS 공격 |
| 문제점 |
| 당신의 내부 네트웍이 192.168.1.x 서브넷에만 존재한다고 가정하자. |
| 이 네트웍의 외부에 있는 머신들은 당신이 관리하는 존에 관해서만 query 할 수 있게 하는 것이 좋다. |
| 왜냐하면 DNS를 공격하는 attacker는 대부분 자신이 관리하는 domain에 query 하는 것을 필요하기 때문이다. |
| 우리가 소유하지 않은 domain, 즉 외부로 나가는 query를 제한하면 여러 DNS 공격을 예방할 수 있다. |
|
| 해결 방안 |
| |
|
| named.conf의 option, zone 항목 수정 |
| option 수정 사항 allow-query { 192.168.1.0/24; }; |
| zone 수정 사항 allow-query { any; }; |
|
| bind의 기술된 zone의 query와 reverse query를 할 수 있으나 그 외의 query는 내부의 호스트들만이 가능하도록 되었다. |
|
| 문제점 |
| recursive query를 내부 호스트에서만 가능하도록 하자. |
| 이것은 resolver library 만을 가진 각각의 host가 name server에 name/IP 매핑을 요청하는 경우이다. |
| 각각의 호스트는 dumb.target.jay의 IP를 물어올 것이다. name server는 우선 root server에게 .jay domain를 묻게 된다. |
| root server는 .jay domain을 관리하는 server의 IP를 주게되고, name server는 이 IP로 .traget.jay의 관리 server를 묻는다. |
| 이 IP를 받아 dumb.target.jay에 대한 name server 정보를 요청한다. 오직 내부의 호스트만이 name server에 이러한 일을 시킬 수 있어야 한다. |
| 외부 호스트들은 자신들의 name server가 있을 것이다. 이러한 외부 호스트들에 recursive query를 허용하면 |
| cache poisoning attack과 같은 공격이 가능해 지고 외부 네트웍에 대한 많은 access를 유발하게 된다. |
|
| 해결 방안 |
| named.conf의 option, zone 항목 수정 |
| option 수정 사항 allow-recursion { 192.168.1.0/24; }; |
|
|
| remote root exploit |
| 문제점 |
| root계정으로 수행 중인 dns를 공격하여 성공하게 되면 root권한을 획득하게 된다. |
| 공격이 성공 하여도 root권한을 획득 할 수 없게 권한이 축소된 named계정을 만들어 실행 시켜줘야 한다. |
|
| 해결방안 |
| named -u dns_user -g dns_group |
|
| Zone Transfer, query |
| dns 의 정보를 이용해 크래킹에 이용 |
|
| dynamic update |
| 동적업데이트의 버그를 이용한 해킹 |
|
| recursive query |
| 재귀호출사용을 막아 dos 공격을 막음 |
|
| DNS Cache Poisoning |
|
| remote root exploit |
| bind의 실행을 권한이 적은 일반 계정으로 수행 |
|
| zone transfer |
| 허가되지 않은 사용자에게 zone 정보가 유출될 |
| 경우 호스트 종류, 네트워크 구성, |
| ip 리스트 등이 노출된다. |
|
| dynamic update |
| DNS 정보의 불법 삭제 및 변경에 악용될 수 있다. |
|
| DNS 공격 방식 |
|
| 풋프린팅(Footprinting) |
| 공격자가 중요한 네트워크 리소스의 DNS 도메인 이름, 컴퓨터 이름 및 IP 주소를 알아내기 위해 DNS 영역 데이터를 가져오는 프로세스입니다. |
| 일반적으로 공격자는 이 DNS 데이터를 사용하여 다이어그램, 풋프린트 또는 네트워크에 대한 공격을 시작합니다. |
| DNS 도메인과 컴퓨터 이름은 대개 사용자가 도메인과 컴퓨터 이름을 쉽게 기억할 수 있도록 도메인 또는 컴퓨터의 기능이나 위치를 나타냅니다. |
| 공격자는 동일한 DNS 원칙을 이용하여 네트워크에 있는 도메인과 컴퓨터의 기능 또는 위치를 알아냅니다. |
|
| 서비스 거부 공격 |
| 공격자가 네트워크에 있는 하나 이상의 DNS 서버에 재귀 쿼리를 집중적으로 보내 네트워크 서비스를 사용할 수 없게 만드는 경우입니다. |
| DNS 서버가 쿼리로 초과되면 결국에는 CPU 사용량이 최대 한계에 도달하여 DNS 서버 서비스를 사용할 수 없게 됩니다. |
| 네트워크에서 DNS 서버가 완전히 작동되지 않으면 네크워크 사용자는 DNS를 사용하는 네트워크 서비스를 사용할 수 없게 됩니다. |
|
| 데이터 수정 |
| DNS를 사용하는 네트워크를 풋프린팅한 공격자가 자신이 만든 IP 패킷에서 유효한 IP 주소를 사용하여 네트워크의 유효한 IP 주소에서 이러한 |
| 패킷을 보낸 것처럼 하려는 시도입니다. 일반적으로 이를 IP 위장이라고 합니다. 공격자는 서브넷의 IP 주소 범위 내에 속하는 유효한 IP 주소를 |
| 통해 네트워크에 액세스하고 데이터를 손상시키거나 다른 공격을 수행할 수 있습니다. |
|
| 리디렉션 |
| 공격자가 DNS 이름에 대한 쿼리를 공격자의 제어를 받고 있는 서버로 리디렉션할 수 있는 경우입니다. |
| 이후 쿼리를 공격자의 제어를 받고 있는 서버로 보내도록 잘못된 DNS 데이터로 DNS 서버의 DNS 캐시를 오염시키려는 시도도 리디렉션의 한 가지 방법입니다. |
| 예를 들어, 쿼리가 원래 example.microsoft.com에 대해 수행되었고 조회 응답이 malicious-user.com 등과 같은 microsoft.com 도메인 외부에 있는 |
| 이름의 레코드를 제공하는 경우 DNS 서버는 malicious-user.com에 대해 캐시된 데이터를 사용하여 해당 이름에 대한 쿼리를 확인합니다. |
| 보안되지 않은 동적 업데이트와 같이 공격자가 DNS 데이터에 쓰기 액세스가 가능할 경우 리디렉션이 발생할 수 있습니다. |
|
| 프로토콜 취약점에 의한 공격 방식 |
| DNS 프로토콜 자체의 결함을 이용해 공격하는 것으로 과도한 로드를 걸거나 메모리 조작으로 인해 정상적인 DNS 서비스를 불가능하게 만드는 것으로 |
| 서비스거부(DoS)ㆍ분산서비스거부(DDoS) 공격이 예가 될 수 있다. |
|
| DNS 캐시 포이즈닝 |
| DNS 캐시 포이즈닝에 의한 공격의 경우 호스트명의 IP주소를 변경, 인터넷 사용자를 위조된 웹사이트로 유인하는 등의 |
| 파밍(Pharming)과 피싱(Phishing)등의 공격이 가능해진다는 점에서 전자보다 더 위협적이다. |
|
| DNS 서버 공격을 통한 파밍 |
| 대부분의 파밍 공격은 피싱과 마찬가지로 새로운 해킹 기법이나 고도의 기술을 필요로 하지 않는다. |
| 국내에는 아직 파밍으로 인한 직접적인 피해 사례가 없으므로 여기서는 주로 해외 사례를 통해 파밍을 이해해본다. |
| 몇 가지 피해 사례를 종합해보면 대체로 파밍은 일반적인 도메인 네임 서비스의 취약성(DNS 캐시 중독, DNS 스푸핑, 도메인 하이제킹)을 통해 발생되는 것을 알 수 있다. |
| 비록 파밍 피해가 없다하더라도 이런 도메인 네임 서비스에 관한 취약성은 많은 국내 업체들의 서버에서도 동일하게 발견되고 있다. |
| 해외의 수많은 파밍 피해 사례에도 불구하고, 국내의 많은 시스템 관리자들이 이런 도메인 네임 서버의 취약성을 대수롭지 않게 여기기 때문이다. |
|
| DNS 보안 |
| Zone Transfer |
| 문제점 |
| Zone Transfer를 이용해 DNS서버의 너무 많은 정보를 얻음으로써 크래킹에 사용될 수 있음 |
|
| 해결 방안 |
| named.conf의 options항목에 allow-transfer 항목을 추가하여 특정 서버만 zone transfer 할 수 있도록 함 |
|
| options { |
| allow-transfer { 192.168.1.1; 192.168.1.2; }; |
| }; |
|
| DynamicUpdate |
| 문제점 |
| DNS 정보의 불법 삭제 및 변경에 악용될 수 있다. |
|
| 해결 방안 |
| named.conf파일의 options항목에 allow-update 항목을 추가하여 특정 서버만 DynamicUpdate할 수 있도록 함 |
| |
| options { |
| allow-update { 192.168.1.1; 192.168.1.2; }; |
| }; |
|
| 서비스거부(DoS) |
| 문제점 |
| DNS 프로토콜 자체의 결함을 이용해 공격하는 것으로 과도한 로드를 걸거나 메모리 조작으로 인해 정상적인 DNS 서비스를 불가능하게 함 |
| |
| 해결 방안 |
| named.conf의 options항목에 allow-query 항목을 추가하여 외부로 나가는 query를 제한하고 관리하는 zone에 관해서만 query 할수 있게 함 |
|
| options { |
| allow-query { 192.168.1.0/24; }; |
| }; |
|
| named.conf의 options항목에 allow-recursion 항목을 추가하여 recursive query를 내부 호스트에서만 가능하도록 설정 하여 네트웍에 대한 많음 access를 제한 |
|
| options { |
| allow-recursion { 192.168.1.0/24; }; |
| }; |
| |
| DNS 캐시 포이즈닝(DNS Cache Poisoning) |
| 문제점 |
| recursion(순환질의)이 허용하도록 잘못된 구성된 DNS 혹은 취약한 버젼의 DNS에 대해 가능한 공격 임 |
| 호스트명의 IP주소를 변경하여 인터넷 사용자를 위조된 웹사이트로 유인하는 등의 파밍(Pharming)과 피싱(Phishing)등의 공격이 가능해짐 |
|
| 해결 방안 |
| named.conf의 options항목에 allow-recursion 항목을 추가하여 recursive qury를 불가능 하게 설정 |
|
| options { |
| allow-recursion { 192.168.1.0/24; }; |
| }; |
|
| DNS 서버 실행시 일반 사용자 계정으로 실행 |
| 문제점 |
| root계정으로 수행 중인 dns를 공격하여 성공하게 되면 root권한을 획득하게 된다. |
| 공격이 성공 하여도 root권한을 획득 못하도록 하여야 한다. |
|
| 해결방안 |
| 권한이 축소된 named계정을 만들어 실행 시켜줘야 한다. |
| named -u dns_user -g dns_group |
|
|
|
|
|
| DOS 공격 |
| 문제점 |
| 당신의 내부 네트웍이 192.168.1.x 서브넷에만 존재한다고 가정하자. |
| 이 네트웍의 외부에 있는 머신들은 당신이 관리하는 존에 관해서만 query 할 수 있게 하는 것이 좋다. |
| 왜냐하면 DNS를 공격하는 attacker는 대부분 자신이 관리하는 domain에 query 하는 것을 필요하기 때문이다. |
| 우리가 소유하지 않은 domain, 즉 외부로 나가는 query를 제한하면 여러 DNS 공격을 예방할 수 있다. |
|
| 해결 방안 |
| |
|
| named.conf의 option, zone 항목 수정 |
| option 수정 사항 allow-query { 192.168.1.0/24; }; |
| zone 수정 사항 allow-query { any; }; |
|
| bind의 기술된 zone의 query와 reverse query를 할 수 있으나 그 외의 query는 내부의 호스트들만이 가능하도록 되었다. |
|
| 문제점 |
| recursive query를 내부 호스트에서만 가능하도록 하자. |
| 이것은 resolver library 만을 가진 각각의 host가 name server에 name/IP 매핑을 요청하는 경우이다. |
| 각각의 호스트는 dumb.target.jay의 IP를 물어올 것이다. name server는 우선 root server에게 .jay domain를 묻게 된다. |
| root server는 .jay domain을 관리하는 server의 IP를 주게되고, name server는 이 IP로 .traget.jay의 관리 server를 묻는다. |
| 이 IP를 받아 dumb.target.jay에 대한 name server 정보를 요청한다. 오직 내부의 호스트만이 name server에 이러한 일을 시킬 수 있어야 한다. |
| 외부 호스트들은 자신들의 name server가 있을 것이다. 이러한 외부 호스트들에 recursive query를 허용하면 |
| cache poisoning attack과 같은 공격이 가능해 지고 외부 네트웍에 대한 많은 access를 유발하게 된다. |
|
| 해결 방안 |
| named.conf의 option, zone 항목 수정 |
| option 수정 사항 allow-recursion { 192.168.1.0/24; }; |
|
|
| remote root exploit |
| 문제점 |
| root계정으로 수행 중인 dns를 공격하여 성공하게 되면 root권한을 획득하게 된다. |
| 공격이 성공 하여도 root권한을 획득 할 수 없게 권한이 축소된 named계정을 만들어 실행 시켜줘야 한다. |
|
| 해결방안 |
| named -u dns_user -g dns_group |
|
| }}} |
|
|
|
|
| !!! BIND 명령어 |
| {{{ |
|
| ---------------------------------------------------------------------------------- |
| Tip : 실행명령 |
| ---------------------------------------------------------------------------------- |
| /usr/local/sbin/named -p 53 -u named |
|
| ---------------------------------------------------------------------------------- |
| Tip : 종료명령 |
| ---------------------------------------------------------------------------------- |
| kill -9 `cat /var/named/run/named.pid` |
| /usr/local/sbin/rndc -s 127.0.0.1 stop |
|
| ---------------------------------------------------------------------------------- |
| 기타 명령어 |
| ---------------------------------------------------------------------------------- |
| reload Reload configuration file and zones. |
| reload zone [class [view]] |
| Reload a single zone. |
| refresh zone [class [view]] |
| Schedule immediate maintenance for a zone. |
| retransfer zone [class [view]] |
| Retransfer a single zone without checking serial number. |
| freeze zone [class [view]] |
| Suspend updates to a dynamic zone. |
| thaw zone [class [view]] |
| Enable updates to a frozen dynamic zone and reload it. |
| reconfig Reload configuration file and new zones only. |
| stats Write server statistics to the statistics file. |
| querylog Toggle query logging. |
| dumpdb Dump cache(s) to the dump file (named_dump.db). |
| stop Save pending updates to master files and stop the server. |
| stop -p Save pending updates to master files and stop the server |
| reporting process id. |
| halt Stop the server without saving pending updates. |
| halt -p Stop the server without saving pending updates reporting |
| process id. |
| trace Increment debugging level by one. |
| trace level Cha |
| notrace Set debugging level to 0. |
| flush Flushes all of the server's caches. |
| flush [view] Flushes the server's cache for a view. |
| flushname name [view] |
| Flush the given name from the server's cache(s) |
| status Display status of the server. |
| recursing Dump the queries that are currently recursing (named.recursing) |
| *restart Restart the server. |
| * == not yet implemented |
| Version: 9.3.1 |
|
| }}} |
|
|
|
|
|
|
|
|
|
|
|
| !!! BIND nsupdate(동적 업데이트) |
| {{{ |
|
| /usr/local/bin/nsupdate |
|
| server 202.30.50.182 |
| update add 8984.978.gs1-eanucc13.id.ods.or.kr. 86400 NS ns.8984.978.gs1-eanucc13.id.ods.or.kr. |
| update add ns.8984.978.gs1-eanucc13.id.ods.or.kr. 86400 A 202.30.50.182 |
| send |
| quit |
|
| server 202.30.50.182 |
| zone id.ods.or.kr |
| prereq yxrrset 3698.235.gs1-eanucc13.id.ods.or.kr. 86400 NS lods.repia.com. |
| update delete 3698.235.gs1-eanucc13.id.ods.or.kr. 86400 NS lods.repia.com. |
| send |
| quit |
|
| }}} |
|
|
|
|
|
| !!! BIND log |
| {{{ |
| 로그 디렉토리 |
| /var/log/named/*.log # /etc/named.conf 에서 로그 설정 |
|
|
| /var/adm/message |
| /var/log/named/* |
| }}} |
|
|
|
|
|
|
|
|
|
| !!! DNS 각종 질의 방법 |
| {{{ |
|
| ---------------------------------------------------------------------------------- |
| soa 질의 |
| ---------------------------------------------------------------------------------- |
| nslookup -type=soa ods.or.kr 202.30.50.180 |
| nslookup -type=soa iata-btic.id.ods.or.kr 202.30.50.180 |
|
| ---------------------------------------------------------------------------------- |
| FQDN 질의 예시 |
| ---------------------------------------------------------------------------------- |
| /usr/local/bin/dig @202.30.50.184 881001.epc-sgtin.id.ods.or.kr NS |
| /usr/local/bin/dig @202.30.50.184 8984.978.gs1-eanucc13.id.ods.or.kr NS |
| |
| /usr/local/bin/dig @202.30.50.184 1.881001.epc-sgtin.id.ods.or.kr NAPTR |
| /usr/local/bin/dig @202.30.50.184 1.8984.978.gs1-eanucc13.id.ods.or.kr NAPTR |
|
| ---------------------------------------------------------------------------------- |
| Tip : 위임받은 도메인 응답에러 |
| ---------------------------------------------------------------------------------- |
| dig로 질의시에 NS 레코드로 위임받을 경우 위임받은 서버가 응답을 할 수 |
| 없으면 ANSWER SECTION 이 없는 응답을 받는다. 위임하는 서버로 dig질의를 |
| 보내는 ANSWER SECTION 을 받을 수 있다. |
|
| ---------------------------------------------------------------------------------- |
| 위임받은 도메인 체크 |
| ---------------------------------------------------------------------------------- |
| 도메인을 NS레코드로 위임받은 후에는 다음과 같이 검사한다. |
| dig @위임하는서버 위임받은도메인 |
| dig @위임받은도메인의NS 위임받은도메인 |
|
| dig @nods.ods.or.kr 1.8984.977.gs1-eanucc13.id.ods.or.kr. naptr |
| dig @ns.8984.977.gs1-eanucc13.id.ods.or.kr. 1.8984.977.gs1-eanucc13.id.ods.or.kr. naptr |
|
|
| > dig @nods.ods.or.kr 1.8984.977.gs1-eanucc13.id.ods.or.kr. naptr |
| # ... |
| # ;; QUESTION SECTION: |
| # ;1.8984.977.gs1-eanucc13.id.ods.or.kr. IN NAPTR |
|
| # ;; AUTHORITY SECTION: |
| # 8984.977.gs1-eanucc13.id.ods.or.kr. 86400 IN NS ns.8984.977.gs1-eanucc13.id.ods.or.kr. |
|
| # ;; ADDITIONAL SECTION: |
| # ns.8984.977.gs1-eanucc13.id.ods.or.kr. 86400 IN A 202.30.50.182 |
| # ... |
|
|
| > dig @ns.8984.977.gs1-eanucc13.id.ods.or.kr. 1.8984.977.gs1-eanucc13.id.ods.or.kr. naptr |
| # ... |
| # ;; QUESTION SECTION: |
| # ;1.8984.977.gs1-eanucc13.id.ods.or.kr. IN NAPTR |
|
| # ;; ANSWER SECTION: |
| # 1.8984.977.gs1-eanucc13.id.ods.or.kr. 86400 IN NAPTR 100 10 "u" "ois+http" "!^.*$!http:#ois1.ods.or.kr/product/df3.xml!" . |
|
| # ;; AUTHORITY SECTION: |
| # 8984.977.gs1-eanucc13.id.ods.or.kr. 86400 IN NS ns.8984.977.gs1-eanucc13.id.ods.or.kr. |
|
| # ;; ADDITIONAL SECTION: |
| # ns.8984.977.gs1-eanucc13.id.ods.or.kr. 86400 IN A 202.30.50.182 |
| # ... |
|
| }}} |