LDA全称Latent Dirichlet Allocation
from sklearn.decomposition import LatentDirichletAllocation
cntVector = CountVectorizer(stop_words=stopwords)
cntTf = cntVector.fit_transform(texts)
lda = LatentDirichletAllocation(n_components=5, max_iter=5,
learning_method='online',
learning_offset=50.)
docres = lda.fit_transform(cntTf)
n_topics
batch
和online
两种,数据量大的情况下用online
更快,默认是batch
类型 | 内容 |
---|---|
标题 | OTTer: A Scalable High-Resolution Encrypted Traffic Identification Engine |
时间 | 2018 |
会议 | RAID |
DOI | 10.1007/978-3-030-00470-5_15 |
贡献:
表1展示了一个示例 Event|Application|Rule –|–|– Voice call|WhatsApp|3{1,3}, 56-60{1,3}, 400-800 Video call|WhatsApp|3{1,3}, 56-60{1,3}, 3{1,3}, 117 OR 3{1,3}, 56-60{1,3}, 3{1,3}, 144 Chat message|WhatsApp|3{1,3}, 52
规则语言规范 bound代表了最小和最大限制的重复次数。
expr ::= piece | piece, expr
piece ::= atom | atom{bound}
atom ::= number | number-number
bound ::= number | number,number
使用模式语言手动为应用程序生成一组签名
25%作为参考,75%用于准确性验证
使用netstat
来获取有关网络连接的信息,在Android设备中,通过BusyBox来使用netstat
命令
不断的调用netstat
并存储,将流和进程对应起来。
TCP有一些机制来避免丢包,丢弃一些没有提供实质信息的数据包(例如需要重传的包)。
设备:使用四台不同型号的安卓手机Sony Xperia D5503,红米3s,小米Note,红米Note3 Pro,并且获取Root权限。使用tcpdump在安卓设备上捕获流量。
OTT应用:WhatsApp、Skype、Facebook Messenger、Viber,专注于识别信息、语音、视频
总共收集了350个样本,每个样本模拟了任意数量的消息或单独的语音/视频呼叫。
命中率: TP 总体的准确率分别是93%,86%,84% 视频和语音准确率低的原因是因为降低FP的一个折中。
Application | Messaging | Voice | Video |
---|---|---|---|
Facebook Messenger | 83% | 96% | 96% |
Skype | 88% | 100% | 75% |
Viber | 100% | 54% | 88% |
100% | 92% | 75% |
误报率: False Positive
FDR=FP/(TP +FP)
Application | Messaging FDR | Voice / video FDR |
---|---|---|
Facebook Messenger | 0% | 1% |
Skype | 5.5% | 4.2% |
Viber | 1% | 2% |
8% | 0.6% |
Aho-Corasick算法是一种字符串搜索算法。可以快速在一个文本中查找多个关键字,时间复杂度是O(n)。
用16位数据包大小来查找。
算法的具体实现略过
对重叠范围进行预处理,提取非重叠的范围。
152-156{1,5},150-600
有重叠的区域,所以要划分为三个部分,150-151
,152-156
,157-600
152-156,150-151
152-156,152-156
152-156,157-600
152-156,152-156,150-151
152-156,152-156,152-156
152-156,152-156,157-600
152-156,152-156,152-156,150-151
152-156,152-156,152-156,152-156
152-156,152-156,152-156,157-600
152-156,152-156,152-156,152-156,150-151
152-156,152-156,152-156,152-156,152-156
152-156,152-156,152-156,152-156,157-600
152-156,152-156,152-156,152-156,152-156,150-151
152-156,152-156,152-156,152-156,152-156,152-156
152-156,152-156,152-156,152-156,152-156,157-600
一个规则的示例,以YAML格式呈现
facebook_video:
event: packet
conditions:
- port: 443
- packet_train: '399{1,2}, 51{1,2}, 1000-1260{1,2}, 38'
actions: ...
whatsapp_video:
event: packet
conditions:
- packet_train:
- '3{1,3}, 48-60{1,3}, 3{1,3}, 117'
- '3{1,3}, 48-60{1,3}, 3{1,3}, 144'
- '3{1,3}, 48-60{1,3}, 3{1,3}, 102'
使用专有的DPI引擎在一个实时流量测试台上实验性地评估了整个系统的性能。
使用了一台HPE Proliant DL380 Gen9服务器,带有两个Intel Xeon E5-2699 v4 CPU,支持超线程,提供了88个逻辑核(lcore),并配置了1TB的RAM。
系统有4x40 Gbps NICs。使用了CentOS 7.4版本。
DPI引擎被配置为使用8个内核来处理来自四个端口的流量(每个端口两个内核)。 这些内核仅执行简单的数据包解码,以便在内部将流量负载平衡到配置为执行流量检查的58个内核。 这些是运行我们的实现的核心。 系统中的其余lcores专用于其他任务,例如日志记录和shell访问。
流量负载包括实际的移动用户流量,一天中流量的变化范围在52-153 Gbps之间,平均为109 Gbps。平均每秒有为161K个连接。 在整个实验中,我们确认了该系统没有出现丢包现象。
作者使用mpstat
查看CPU使用率,在一个时间段有130Gbps的流量,此时CPU使用率是34.2%,在启用拓展后,CPU使用率上升到了37.6%。使用Perf
工具检查函数extension_packet_train_multiset_match
,测量的结果也是占用3%。即该扩展对性能的占用很小。
增加签名数量1-20,对CPU额外的占用率在2.7%-3%之间
应用频繁模式挖掘(frequent pattern mining ,FPM)
步骤:
对于不同方向的包,加一个负号来表示负载大小。
TP rate
Application | Messaging | Voice | Video |
---|---|---|---|
Facebook Messenger | 42% (-41) | 54% (-42) | 83% (-13) |
Skype | 100% (+12) | 96% (-4) | 100% (+25) |
Viber | 100% (0) | 96% (+42) | 100% (+12) |
100% (0) | 100% (+8) | 100% (+25) |
FDR
Application | Messaging FDR | Voice/video FDR |
---|---|---|
Facebook Messenger | 0% (0) | 3% (+2) |
Skype | 2% (-3.5) | 8.4% (+4.2) |
Viber | 3% (+1) | 2% (0) |
2% (-6) | 3.3% (+2.7) |
WhatsApp的消息活动数据包捕获。垂直线表示实际传出的聊天消息,而Main和FPM点显示检测到的事件。
下图展示了漏报和误报
DNS重绑定(DNS Rebinding Attack) 是计算机攻击的一种形式。 DNS重绑定通过滥用DNS来绕过同源策略的保护,当用户访问恶意网页时会运行指定脚本,将受害者的浏览器转换为开放的代理,攻击网络上其他的计算机。
在网页浏览过程中,用户访问一个指定的域名,浏览器通过DNS服务器将域名解析为IP地址,然后向对应的IP地址请求资源,最后展现给用户。而对于域名所有者,他可以设置域名所对应的IP地址。当用户第一次访问,解析域名获取一个IP地址;然后,域名持有者修改对应的IP地址;用户再次请求该域名,就会获取一个新的IP地址。对于浏览器来说,整个过程访问的都是同一域名,所以认为是安全的。这就造成了DNS重绑定攻击1。
斯坦福大学在2007年发表文章Protecting Browsers from DNS Rebinding Attacks2对DNS重绑定进行了系统的研究并提出了一些解决方法。
上图是在使用singularity工具进行DNS重绑定攻击时,在各个系统和浏览器下的完成攻击所用的方法和时间3
是一项浏览器安全功能,同源策略限制了从同一个源加载的文档或脚本,与来自另一个源的资源进行交互。这是一个用于隔离潜在恶意文件的重要安全机制。
即DNS服务器缓存此条DNS记录的时间,单位为秒。
是一款能够帮助渗透测试人员实时执行DNS重绑定的DNS服务器,Whonow允许定义DNS响应并通过域名请求来实现规则的动态重绑定。
例如对于域名A.192.168.1.1.forever.rebind.network
的DNS查询结果就是192.168.1.1(为简洁表达,查询结果省略无关信息)
>>> dig A.192.168.1.1.forever.rebind.network
;; ANSWER SECTION:
A.192.168.1.1.forever.rebind.network. 1 IN A 192.168.1.1
对于域名A.127.0.0.1.1time.10.0.0.1.1time.repeat.rebind.network
的查询则轮流返回127.0.0.1
和10.0.0.1
>>> dig A.127.0.0.1.1time.10.0.0.1.1time.repeat.rebind.network
;; ANSWER SECTION:
A.127.0.0.1.1time.10.0.0.1.1time.repeat.rebind.network. 1 IN A 127.0.0.1
>>> dig A.127.0.0.1.1time.10.0.0.1.1time.repeat.rebind.network
;; ANSWER SECTION:
A.127.0.0.1.1time.10.0.0.1.1time.repeat.rebind.network. 1 IN A 10.0.0.1
attacker.com
,通过多种方式吸引受害者访问此恶意域名现代的浏览器使用多个插件(例如Flash,Java)来显示一个网页,攻击者可以维护多个独立的DNS Pin数据库,通过不同pin获得的DNS解析结果是不同的,通过这种方式可以在几百毫秒内完成攻击。
Kali Linux提供了工具Rebind用于发起DNS重绑定攻击,例如用指定的域名kali.local
发起dns重绑定攻击
root@kali:~# rebind -i eth0 -d kali.local
[+] Starting DNS server on port 53
[+] Starting attack Web server on port 80
[+] Starting callback Web server on port 81
[+] Starting proxy server on 192.168.1.202:664
[+] Services started and running!
> dns
[+] 192.168.1.202 kali.local.
[+] 192.168.1.202 www.kali.local.
[+] 192.168.1.202 ns1.kali.local.
[+] 192.168.1.202 ns2.kali.local.
具体使用方法见https://tools.kali.org/sniffingspoofing/rebind
DNS Rebind Toolkit是一款前端JavaScript框架,可以对存在漏洞的主机或局域网进行重绑定攻击。在这款工具的帮助下,远程攻击者可绕过路由器的防火墙,然后直接与目标用户家庭网络内的设备进行交互,并提取出隐私信息,在某些情况下他们甚至还可以直接控制目标设备。
工具的安装及使用方法见https://github.com/brannondorsey/dns-rebind-toolkit
由ncc团队提出的一个发起DNS重绑定攻击的工具,位于https://github.com/nccgroup/singularity
提供了一套完整的解决方案,包括:
攻击者使用DNS重绑定攻击用户局域网中的无线路由器:
http://192.168.1.1/login
,使用默认账户(如admin:admin)进行登录许多常见的物联网设备都可能被DNS重绑进行攻击,例如Google Home系列产品提供了一些设备控制的API,例如播放内容或者重启、恢复出厂设置等,此类API无需身份验证,攻击者可以通过JavaScript脚本轻松调用这些API实现设备控制。
网络安全公司Armis分析了DNS重绑定对物联网设备的影响,调查显示,企业使用的近5亿智能设备易受DNS重新绑定攻击,包括智能电视、路由器、打印机、监控摄像头、IP 电话、智能助手等等6. http://rebind.network是一个DNS重绑定攻击的演示网站,在访问时会尝试检测你当前网络中的Google Home、Roku、Sonos等物联网设备
攻击者可以将DNS解析结果重绑定到公有ip上,将受害者的机器变成一个bot,进行广告点击、发送垃圾邮件等操作
http://rebind.network/rebind/index.html
DNS重绑定的防御手段可以在浏览器、插件、DNS解析程序、防火墙和服务器上实现,在与外部域和内部域通信时的所有服务上使用TLS加密,可以比较有效的避免DNS重绑定。
通过制定防火墙的规则,禁止将外部主机名解析为内部ip地址,可以保护局域网内的设备受到攻击。
许多网页是通过各种插件来显示,例如Flash和Java。许多插件直接建立一个新的socket与服务器通信,插件建立socket时的DNS解析结果可能指向目标主机。可以通过实现认证策略,或通过ip而不是host来建立socket连接,来避免重绑定攻击。
目前DNS重绑定漏洞已经被发现并研究了很长一段时间,它通过修改DNS解析的结果,来绕过浏览器的同源策略,使用户向某个指定的服务器发送请求并获取响应。这种攻击的出现使得防火墙内部的局域网设备也容易受到攻击。 已经有很多的设备及浏览器为DNS重绑定设定可安全策略,但还是存在许多漏洞使得DNS重绑定可以攻击成功。比较有效的防御方法是使用TLS加密和身份认证机制。
https://www.tripwire.com/state-of-security/vert/practical-attacks-dns-rebinding/ ↩
JACKSON C, BARTH A, BORTZ A, 等. Protecting browsers from DNS rebinding attacks[J]. ACM Transactions on the Web, 2009, 3(1): 2:1–2:26. DOI:10.1145/1462148.1462150. ↩
https://docs.google.com/presentation/d/1O7MxvbIfRcPSlbyZbFxD-fAR34XlquQSlRAHPb2kR4E/edit#slide=id.p ↩
https://www.freebuf.com/sectool/177299.html ↩
https://github.com/nccgroup/singularity ↩
https://www.freebuf.com/company-information/178622.html ↩
sudo xattr -r -d com.apple.quarantine
+ App路径
sudo xattr -r -d com.apple.quarantine /Applications/Sketch.app/