聯(lián)想的域名劫持事件剛剛結(jié)束不就,前面的文章中有大牛已經(jīng)分析了一些事件补君。作為企業(yè)安全人員引几,更關(guān)心的的是這種事件如何盡早發(fā)現(xiàn)。通過外媒對聯(lián)想的域名劫持事件的報道挽铁,透露出事情發(fā)生后伟桅,直到記者提出采訪要求,他們的高管才知道域名被黑客劫持叽掘。
所以楣铁,為了防范于未然,我們可以利用一些腳本來對DNS進行監(jiān)控更扁,如果發(fā)生了劫持事件盖腕,至少我們能夠盡早發(fā)現(xiàn)問題。
本文的代碼都是使用python編寫疯潭,并安裝了一個開源庫,dnspython. http://www.dnspython.org
一面殖、域名對應(yīng)地址收集腳本
功能:
這個腳本用來初始化域名 <->IP 的記錄竖哩。
機制:
該腳本通過讀取格式為
www.weibo.com
m.weibo.com
xx.weibo.com
的文本來進行dns查詢并生成域名 以及對應(yīng) 的IP 文件,以domainip.txt命名脊僚。
<code>
import dns.resolver
import sys
def FileOpen(filename):
filehandle = open(filename,'r')
filehandle2 = open('domainip.txt','w')
domain = filehandle.readline()
while(domain):
search_result = []
domain = domain.strip('\n')
try:
ipaddress = dns.resolver.query(domain,rdtype='A')
except:
None
for i in ipaddress:
search_result = domain + ' ' + str(i) + '\n'
filehandle2.write(search_result)
domain = filehandle.readline()
if name == 'main':
Filename = sys.argv[1]
FileOpen(Filename)
</code>
格式為:
www.weibo.com 127.0.0.1
www.weibo.com 127.0.0.2
m.weibo.com 172.0.0.1
xx.weibo.com 132.0.0.1
二相叁、文件監(jiān)控腳本
功能:
該腳本會讀取domainip.txt文件中的域名進行解析,然后對比domainip.txt中記錄的初始ip是否與之一致辽幌,如果一致則正常增淹,否則便告警。
<code>
import dns.resolver
def FileOpen():
filehandle2 = open('result.txt','r')
summary = filehandle2.readline()
while(summary):
search_result = []
result_ip = []
summary = summary.strip('\n')
domain = summary.split(' ')[0]
try:
ipaddress = dns.resolver.query(domain,rdtype='A')
for i in ipaddress:
search_result.append(str(i))
except:
print domain,"No anwser error"
deep = len(search_result)
search_result.sort()
if deep and summary > 1:
for i in range(deep):
try:
summary = summary.strip('\n')
ip = summary.split(' ')[1]
result_ip.append(ip)
result_ip.sort()
summary = filehandle2.readline()
except IndexError:
continue
if(search_result == result_ip):
print domain,'OK'
else:
print domain,search_result,result_ip
else:
result_ip.append(summary.split(' ')[1] )
if( search_result == result_ip and search_result):
print domain,'OK'
else:
print 'not ok',domain,search_result
summary = filehandle2.readline()
if name == 'main':
FileOpen()
</code>
最后便是寫入crontab