在过去的犯罪往往要付出高额代价和危险的犯罪模式,而在大数据和互联网的时代,网络战争已经成为了主旋律,如果再要发生一次世界大战,那么必然是网络战,或者说它的硝烟已经开始弥漫。而apt攻击人员是一种具有高威胁的黑客阶层,它不同于传统黑客的低威胁能力,需要有强大的意识和组织,属于”The hacker army” or “The hacker killer”。你永远不会知道apt攻击人员的真实身份和他们来自何处,就像杀手永远不会宣称自己是杀手,而真正的黑客永远不被人所知。 

针对于网络战的攻击人员,简单的kali linux,parrotos,cyborg,blackarch的匿名性可能已经不够满足我们的需求,我更推荐你使用更匿名的操作系统:

Qubes OS: https://www.qubes-os.org/

你可以看一下谁对它比较推崇

1.jpg

Tails: https://tails.boum.org/install/download/index.en.html

2.jpg

whonix: https://www.whonix.org/wiki/Main_Page

3.jpg

使用公共网络

Wifislax

http://www.wifislax.com/

如果你不了解它你可能不太了解无线网络攻击审计

4.jpg

学会变得相对匿名

研究深入的匿名人员都知道它并非100%的匿名,也有迹可寻,但有什么能比使用tor网络进行黑客攻击更完美的呢?在使用tor的时候为了预防别人监控出口节点,我们可以破解他人的wifi或者公共网络,然后使用vpn再连接tor,这样的话,我无法保证你100%安全,但我也很怀疑追捕的程度要付出多大才能知道你,请使用它。

5.jpg

攻击面

当你锁定你的目标,你必须将这个网撒到最大,也就是攻击面,当你的攻击面越大,你的成功的机会就越大,你的突破口就越多,对方暴露在你视角下的位置也就越多。当持球者进行突破的时候,如果你只看对位者,那就算你过掉他后面还有层层防御等着你;但是如果你直接看到进攻篮筐的路线,第一个对位者往往面临巨大的心理压力而且可以很容易被你过掉。

6.jpg

攻击面的信息收集

常规的子域名枚举,谷歌敏感信息收集,whois正反查询,指纹和开放端口等之外的,我强烈推荐你进行社会工程学攻击。

nsa.jpg

弱点总是来自它的本身

对于一个目标人物而言,它所在的工作单位,简单的官网开放浏览你就可以搜集到很多有用的信息,对目标组织也一样适用。进一步的,你可以通过web或者服务器层面的漏洞利用(通常的防护不可能面面俱到,你需要细心发现它们的薄弱处),甚至是弱口令进入他们的邮箱系统,oa系统,财务系统,业务处理系统,进入企业内网的vpn密码放在使用说明的概率也非常之大;通过目标本身的问题进行攻击,往往很难追溯也最让对方头疼,因为他自己是看不到自己的牙缝有韭菜的。

8.jpg

对组织网站的后缀文件收集

通过猜测文件的后缀格式结合搜索引擎可以收集的有电话,手机号,履历,住址,出生年月等等。从泄露的数据库查找密码,进行尝试,或者改造后尝试。领英,企业注册关系,很容易的看到目标的社交网络。

对于隐私数据存放敏感的组织进行渗透

不要忘了求职网站,这类网站投递的简历往往是隐私攻击的高利用点通常防护性不高,我的同僚曾有投递某安全企业简历,没过几分钟就有诈骗电话(伪装号码)打进要求提供身份证和住址学校信息,可见有些求职网站早已经跌入黑产圈。

 9.jpg

 

熟悉浏览器攻击

当你没有0day的时候,钓鱼链接和页面往往能对安全意识薄弱的用户进行获得通入目标基地的钥匙,不要忽略它的强大,就算是一个信息安全顾问,他的妻子很可能就对计算机网络毫无兴趣。

 10.jpg

时间的争抢就是我们的战斗

更多的学会收集office(word)和浏览器(IE,firefox,chrome)的exp,当一个漏洞的出现,到漏洞补丁的出现,到目标修复漏洞之前的这个时间段往往是攻击最高效的时区,学会打好这个时间战是一个网络战人员必须具备的素养。

 11.jpg

学习最先进的技术(漏洞利用)能迅速的成为一只攻击手

今年是2018年,我强烈的不介意你去学习2016年之前的技术,你应该从当下开始从各大安全网站,漏洞数据库进行检索学习,选取有效的漏洞进行学习如何去利用,然后反复测试该漏洞针对当下的效率如何,被修复的程度占百分之几,是政府,企业,组织,学校还是什么类别目标常存在的漏洞而容易忽视,针对性学习针对性攻击。

 12.jpg

关注本质存在的问题让你时刻具备威胁

暴力破解,弱口令,还有大规模的人使用xp,还有70%网络使用者并不会更新系统补丁,他们甚至讨厌防护软件的查杀干扰他们的办公,任有相当基数大的群体相信这样那样可以中奖,123456的背后包含着该组织的重要口令,文件,密码,如果一个软件的使用者收到软件官网送来的最新试用版会多么乐意的使用它(其实是破解版),而它真实有效(只是藏着监听后门)或者它没有效果,失望的把它删除,但是后门已经在运作,那么你要了解绕过防护软件的技术可能必须掌握。

 13.jpg

学会成为目标的邻居

当然我们可以破解他的无线网络,进行嗅探;一个组织或者企业的公共网络往往是开放的,但是这不妨碍我们进行劫持获得一大堆账号密码口令从中选择有用的进行利用;例如一个认证网络登陆的口令页面往往是http,劫持到的明文账号密码可以轻易的让你进入内网漫游,甚至该账号密码就是他们工作平台的通行口令,财务的通行口令,邮箱的通行口令。无法破解怎么办?这不妨碍我们进行攻击,架设伪造热点,例如目标企业的覆盖无线网是test,那你伪造一个test-5G员工往往会以为网络进行了加速升级,而无需输入密码使它变得更便捷。

 14.jpg

其它操作的细化:我非常乐意你关注我的[email protected],我会在空余时间将对技术点进行短视频的录制和讲解,非常乐意为你提升你的技能库。

在过去的犯罪往往要付出高额代价和危险的犯罪模式,而在大数据和互联网的时代,网络战争已经成为了主旋律,如果再要发生一次世界大战,那么必然是网络战,或者说它的硝烟已经开始弥漫。而apt攻击人员是一种具有高威胁的黑客阶层,它不同于传统黑客的低威胁能力,需要有强大的意识和组织,属于”The hacker army” or “The hacker killer”。你永远不会知道apt攻击人员的真实身份和他们来自何处,就像杀手永远不会宣称自己是杀手,而真正的黑客永远不被人所知。 

针对于网络战的攻击人员,简单的kali linux,parrotos,cyborg,blackarch的匿名性可能已经不够满足我们的需求,我更推荐你使用更匿名的操作系统:

Qubes OS: https://www.qubes-os.org/

你可以看一下谁对它比较推崇

1.jpg

Tails: https://tails.boum.org/install/download/index.en.html

2.jpg

whonix: https://www.whonix.org/wiki/Main_Page

3.jpg

使用公共网络

Wifislax

http://www.wifislax.com/

如果你不了解它你可能不太了解无线网络攻击审计

4.jpg

学会变得相对匿名

研究深入的匿名人员都知道它并非100%的匿名,也有迹可寻,但有什么能比使用tor网络进行黑客攻击更完美的呢?在使用tor的时候为了预防别人监控出口节点,我们可以破解他人的wifi或者公共网络,然后使用vpn再连接tor,这样的话,我无法保证你100%安全,但我也很怀疑追捕的程度要付出多大才能知道你,请使用它。

5.jpg

攻击面

当你锁定你的目标,你必须将这个网撒到最大,也就是攻击面,当你的攻击面越大,你的成功的机会就越大,你的突破口就越多,对方暴露在你视角下的位置也就越多。当持球者进行突破的时候,如果你只看对位者,那就算你过掉他后面还有层层防御等着你;但是如果你直接看到进攻篮筐的路线,第一个对位者往往面临巨大的心理压力而且可以很容易被你过掉。

6.jpg

攻击面的信息收集

常规的子域名枚举,谷歌敏感信息收集,whois正反查询,指纹和开放端口等之外的,我强烈推荐你进行社会工程学攻击。

nsa.jpg

弱点总是来自它的本身

对于一个目标人物而言,它所在的工作单位,简单的官网开放浏览你就可以搜集到很多有用的信息,对目标组织也一样适用。进一步的,你可以通过web或者服务器层面的漏洞利用(通常的防护不可能面面俱到,你需要细心发现它们的薄弱处),甚至是弱口令进入他们的邮箱系统,oa系统,财务系统,业务处理系统,进入企业内网的vpn密码放在使用说明的概率也非常之大;通过目标本身的问题进行攻击,往往很难追溯也最让对方头疼,因为他自己是看不到自己的牙缝有韭菜的。

8.jpg

对组织网站的后缀文件收集

通过猜测文件的后缀格式结合搜索引擎可以收集的有电话,手机号,履历,住址,出生年月等等。从泄露的数据库查找密码,进行尝试,或者改造后尝试。领英,企业注册关系,很容易的看到目标的社交网络。

对于隐私数据存放敏感的组织进行渗透

不要忘了求职网站,这类网站投递的简历往往是隐私攻击的高利用点通常防护性不高,我的同僚曾有投递某安全企业简历,没过几分钟就有诈骗电话(伪装号码)打进要求提供身份证和住址学校信息,可见有些求职网站早已经跌入黑产圈。

 9.jpg

 

熟悉浏览器攻击

当你没有0day的时候,钓鱼链接和页面往往能对安全意识薄弱的用户进行获得通入目标基地的钥匙,不要忽略它的强大,就算是一个信息安全顾问,他的妻子很可能就对计算机网络毫无兴趣。

 10.jpg

时间的争抢就是我们的战斗

更多的学会收集office(word)和浏览器(IE,firefox,chrome)的exp,当一个漏洞的出现,到漏洞补丁的出现,到目标修复漏洞之前的这个时间段往往是攻击最高效的时区,学会打好这个时间战是一个网络战人员必须具备的素养。

 11.jpg

学习最先进的技术(漏洞利用)能迅速的成为一只攻击手

今年是2018年,我强烈的不介意你去学习2016年之前的技术,你应该从当下开始从各大安全网站,漏洞数据库进行检索学习,选取有效的漏洞进行学习如何去利用,然后反复测试该漏洞针对当下的效率如何,被修复的程度占百分之几,是政府,企业,组织,学校还是什么类别目标常存在的漏洞而容易忽视,针对性学习针对性攻击。

 12.jpg

关注本质存在的问题让你时刻具备威胁

暴力破解,弱口令,还有大规模的人使用xp,还有70%网络使用者并不会更新系统补丁,他们甚至讨厌防护软件的查杀干扰他们的办公,任有相当基数大的群体相信这样那样可以中奖,123456的背后包含着该组织的重要口令,文件,密码,如果一个软件的使用者收到软件官网送来的最新试用版会多么乐意的使用它(其实是破解版),而它真实有效(只是藏着监听后门)或者它没有效果,失望的把它删除,但是后门已经在运作,那么你要了解绕过防护软件的技术可能必须掌握。

 13.jpg

学会成为目标的邻居

当然我们可以破解他的无线网络,进行嗅探;一个组织或者企业的公共网络往往是开放的,但是这不妨碍我们进行劫持获得一大堆账号密码口令从中选择有用的进行利用;例如一个认证网络登陆的口令页面往往是http,劫持到的明文账号密码可以轻易的让你进入内网漫游,甚至该账号密码就是他们工作平台的通行口令,财务的通行口令,邮箱的通行口令。无法破解怎么办?这不妨碍我们进行攻击,架设伪造热点,例如目标企业的覆盖无线网是test,那你伪造一个test-5G员工往往会以为网络进行了加速升级,而无需输入密码使它变得更便捷。

 14.jpg

其它操作的细化:我非常乐意你关注我的[email protected],我会在空余时间将对技术点进行短视频的录制和讲解,非常乐意为你提升你的技能库。

在过去的犯罪往往要付出高额代价和危险的犯罪模式,而在大数据和互联网的时代,网络战争已经成为了主旋律,如果再要发生一次世界大战,那么必然是网络战,或者说它的硝烟已经开始弥漫。而apt攻击人员是一种具有高威胁的黑客阶层,它不同于传统黑客的低威胁能力,需要有强大的意识和组织,属于”The hacker army” or “The hacker killer”。你永远不会知道apt攻击人员的真实身份和他们来自何处,就像杀手永远不会宣称自己是杀手,而真正的黑客永远不被人所知。 

针对于网络战的攻击人员,简单的kali linux,parrotos,cyborg,blackarch的匿名性可能已经不够满足我们的需求,我更推荐你使用更匿名的操作系统:

Qubes OS: https://www.qubes-os.org/

你可以看一下谁对它比较推崇

1.jpg

Tails: https://tails.boum.org/install/download/index.en.html

2.jpg

whonix: https://www.whonix.org/wiki/Main_Page

3.jpg

使用公共网络

Wifislax

http://www.wifislax.com/

如果你不了解它你可能不太了解无线网络攻击审计

4.jpg

学会变得相对匿名

研究深入的匿名人员都知道它并非100%的匿名,也有迹可寻,但有什么能比使用tor网络进行黑客攻击更完美的呢?在使用tor的时候为了预防别人监控出口节点,我们可以破解他人的wifi或者公共网络,然后使用vpn再连接tor,这样的话,我无法保证你100%安全,但我也很怀疑追捕的程度要付出多大才能知道你,请使用它。

5.jpg

攻击面

当你锁定你的目标,你必须将这个网撒到最大,也就是攻击面,当你的攻击面越大,你的成功的机会就越大,你的突破口就越多,对方暴露在你视角下的位置也就越多。当持球者进行突破的时候,如果你只看对位者,那就算你过掉他后面还有层层防御等着你;但是如果你直接看到进攻篮筐的路线,第一个对位者往往面临巨大的心理压力而且可以很容易被你过掉。

6.jpg

攻击面的信息收集

常规的子域名枚举,谷歌敏感信息收集,whois正反查询,指纹和开放端口等之外的,我强烈推荐你进行社会工程学攻击。

nsa.jpg

弱点总是来自它的本身

对于一个目标人物而言,它所在的工作单位,简单的官网开放浏览你就可以搜集到很多有用的信息,对目标组织也一样适用。进一步的,你可以通过web或者服务器层面的漏洞利用(通常的防护不可能面面俱到,你需要细心发现它们的薄弱处),甚至是弱口令进入他们的邮箱系统,oa系统,财务系统,业务处理系统,进入企业内网的vpn密码放在使用说明的概率也非常之大;通过目标本身的问题进行攻击,往往很难追溯也最让对方头疼,因为他自己是看不到自己的牙缝有韭菜的。

8.jpg

对组织网站的后缀文件收集

通过猜测文件的后缀格式结合搜索引擎可以收集的有电话,手机号,履历,住址,出生年月等等。从泄露的数据库查找密码,进行尝试,或者改造后尝试。领英,企业注册关系,很容易的看到目标的社交网络。

对于隐私数据存放敏感的组织进行渗透

不要忘了求职网站,这类网站投递的简历往往是隐私攻击的高利用点通常防护性不高,我的同僚曾有投递某安全企业简历,没过几分钟就有诈骗电话(伪装号码)打进要求提供身份证和住址学校信息,可见有些求职网站早已经跌入黑产圈。

 9.jpg

 

熟悉浏览器攻击

当你没有0day的时候,钓鱼链接和页面往往能对安全意识薄弱的用户进行获得通入目标基地的钥匙,不要忽略它的强大,就算是一个信息安全顾问,他的妻子很可能就对计算机网络毫无兴趣。

 10.jpg

时间的争抢就是我们的战斗

更多的学会收集office(word)和浏览器(IE,firefox,chrome)的exp,当一个漏洞的出现,到漏洞补丁的出现,到目标修复漏洞之前的这个时间段往往是攻击最高效的时区,学会打好这个时间战是一个网络战人员必须具备的素养。

 11.jpg

学习最先进的技术(漏洞利用)能迅速的成为一只攻击手

今年是2018年,我强烈的不介意你去学习2016年之前的技术,你应该从当下开始从各大安全网站,漏洞数据库进行检索学习,选取有效的漏洞进行学习如何去利用,然后反复测试该漏洞针对当下的效率如何,被修复的程度占百分之几,是政府,企业,组织,学校还是什么类别目标常存在的漏洞而容易忽视,针对性学习针对性攻击。

 12.jpg

关注本质存在的问题让你时刻具备威胁

暴力破解,弱口令,还有大规模的人使用xp,还有70%网络使用者并不会更新系统补丁,他们甚至讨厌防护软件的查杀干扰他们的办公,任有相当基数大的群体相信这样那样可以中奖,123456的背后包含着该组织的重要口令,文件,密码,如果一个软件的使用者收到软件官网送来的最新试用版会多么乐意的使用它(其实是破解版),而它真实有效(只是藏着监听后门)或者它没有效果,失望的把它删除,但是后门已经在运作,那么你要了解绕过防护软件的技术可能必须掌握。

 13.jpg

学会成为目标的邻居

当然我们可以破解他的无线网络,进行嗅探;一个组织或者企业的公共网络往往是开放的,但是这不妨碍我们进行劫持获得一大堆账号密码口令从中选择有用的进行利用;例如一个认证网络登陆的口令页面往往是http,劫持到的明文账号密码可以轻易的让你进入内网漫游,甚至该账号密码就是他们工作平台的通行口令,财务的通行口令,邮箱的通行口令。无法破解怎么办?这不妨碍我们进行攻击,架设伪造热点,例如目标企业的覆盖无线网是test,那你伪造一个test-5G员工往往会以为网络进行了加速升级,而无需输入密码使它变得更便捷。

 14.jpg

其它操作的细化:我非常乐意你关注我的[email protected],我会在空余时间将对技术点进行短视频的录制和讲解,非常乐意为你提升你的技能库。

在过去的犯罪往往要付出高额代价和危险的犯罪模式,而在大数据和互联网的时代,网络战争已经成为了主旋律,如果再要发生一次世界大战,那么必然是网络战,或者说它的硝烟已经开始弥漫。而apt攻击人员是一种具有高威胁的黑客阶层,它不同于传统黑客的低威胁能力,需要有强大的意识和组织,属于”The hacker army” or “The hacker killer”。你永远不会知道apt攻击人员的真实身份和他们来自何处,就像杀手永远不会宣称自己是杀手,而真正的黑客永远不被人所知。

 

针对于网络战的攻击人员,简单的kali linux,parrotos,cyborg,blackarch的匿名性可能已经不够满足我们的需求,我更推荐你使用更匿名的操作系统:

Qubes OS: https://www.qubes-os.org/

你可以看一下谁对它比较推崇

1.jpg

Tails: https://tails.boum.org/install/download/index.en.html

2.jpg

whonix: https://www.whonix.org/wiki/Main_Page

3.jpg

使用公共网络

Wifislax

http://www.wifislax.com/

如果你不了解它你可能不太了解无线网络攻击审计

4.jpg

学会变得相对匿名:

研究深入的匿名人员都知道它并非100%的匿名,也有迹可寻,但有什么能比使用tor网络进行黑客攻击更完美的呢?在使用tor的时候为了预防别人监控出口节点,我们可以破解他人的wifi或者公共网络,然后使用vpn再连接tor,这样的话,我无法保证你100%安全,但我也很怀疑追捕的程度要付出多大才能知道你,请使用它。

吉利服.jpg

攻击面:

当你锁定你的目标,你必须将这个网撒到最大,也就是攻击面,当你的攻击面越大,你的成功的机会就越大,你的突破口就越多,对方暴露在你视角下的位置也就越多。当持球者进行突破的时候,如果你只看对位者,那就算你过掉他后面还有层层防御等着你;但是如果你直接看到进攻篮筐的路线,第一个对位者往往面临巨大的心理压力而且可以很容易被你过掉。

6.jpg

攻击面的信息收集:

常规的子域名枚举,谷歌敏感信息收集,whois正反查询,指纹和开放端口等之外的,我强烈推荐你进行社会工程学攻击。

nsa.jpg

弱点总是来自它的本身:

对于一个目标人物而言,它所在的工作单位,简单的官网开放浏览你就可以搜集到很多有用的信息,对目标组织也一样适用。进一步的,你可以通过弱口令进入他们的邮箱系统,oa系统,财务系统,业务处理系统,进入企业内网的vpn弱口令的概率和密码放在使用说明的概率也非常之大;通过目标本身的问题进行攻击,往往很难追溯也最让对方头疼,因为他自己是看不到自己的牙缝有韭菜的。

8.jpg

对组织网站的后缀文件收集:

通过猜测文件的后缀格式结合搜索引擎可以收集的有电话,手机号,履历,住址,出生年月等等。从泄露的数据库查找密码,进行尝试,或者改造后尝试。领英,企业注册关系,很容易的看到目标的社交网络。

 

 

对于隐私数据存放敏感的组织进行渗透:

不要忘了求职网站,这类网站投递的简历往往是隐私攻击的高利用点通常防护性不高,我的同僚曾有投递某安全企业简历,没过几分钟就有诈骗电话(伪装号码)打进要求提供身份证和住址学校信息,可见有些求职网站早已经跌入黑产圈。

 9.jpg

 

熟悉浏览器攻击:

当你没有0day的时候,钓鱼链接和页面往往能对安全意识薄弱的用户进行获得通入目标基地的钥匙,不要忽略它的强大,就算是一个信息安全顾问,他的妻子很可能就对计算机网络毫无兴趣。

 10.jpg

时间的争抢就是我们的战斗:

更多的学会收集office(word)和浏览器(IE,firefox,chrome)的exp,当一个漏洞的出现,到漏洞补丁的出现,到目标修复漏洞之前的这个时间段往往是攻击最高效的时区,学会打好这个时间战是一个网络战人员必须具备的素养。

 11.jpg

学习最先进的技术(漏洞利用)能迅速的成为一只攻击手:

今年是2018年,我强烈的不介意你去学习2016年之前的技术,你应该从当下开始从各大安全网站,漏洞数据库进行检索学习,选取有效的漏洞进行学习如何去利用,然后反复测试该漏洞针对当下的效率如何,被修复的程度占百分之几,是政府,企业,组织,学校还是什么类别目标常存在的漏洞而容易忽视,针对性学习针对性攻击。

 12.jpg

关注本质存在的问题让你时刻具备威胁:

暴力破解,弱口令,还有大规模的人使用xp,还有70%网络使用者并不会更新系统补丁,他们甚至讨厌防护软件的查杀干扰他们的办公,任有相当基数大的群体相信这样那样可以中奖,123456的背后包含着该组织的重要口令,文件,密码,如果一个软件的使用者收到软件官网送来的最新试用版会多么乐意的使用它(其实是破解版),而它真实有效(只是藏着监听后门)或者它没有效果,失望的把它删除,但是后门已经在运作,那么你要了解绕过防护软件的技术可能必须掌握。

 13.jpg

学会成为目标的邻居:

当然我们可以破解他的无线网络,进行嗅探;一个组织或者企业的公共网络往往是开放的,但是这不妨碍我们进行劫持获得一大堆账号密码口令从中选择有用的进行利用;例如一个认证网络登陆的口令页面往往是http,劫持到的明文账号密码可以轻易的让你进入内网漫游,甚至该账号密码就是他们工作平台的通行口令,财务的通行口令,邮箱的通行口令。无法破解怎么办?这不妨碍我们进行攻击,架设伪造热点,例如目标企业的覆盖无线网是test,那你伪造一个test-5G员工往往会以为网络进行了加速升级,而无需输入密码使它变得更便捷。

 14.jpg

其它操作的细化:我非常乐意你关注我的[email protected],我会在空余时间将对技术点进行短视频的录制和讲解,非常乐意为你提升你的技能库。

 

在过去的犯罪往往要付出高额代价和危险的犯罪模式,而在大数据和互联网的时代,网络战争已经成为了主旋律,如果再要发生一次世界大战,那么必然是网络战,或者说它的硝烟已经开始弥漫。而apt攻击人员是一种具有高威胁的黑客阶层,它不同于传统黑客的低威胁能力,需要有强大的意识和组织,属于”The hacker army” or “The hacker killer”。你永远不会知道apt攻击人员的真实身份和他们来自何处,就像杀手永远不会宣称自己是杀手,而真正的黑客永远不被人所知。

 

针对于网络战的攻击人员,简单的kali linux,parrotos,cyborg,blackarch的匿名性可能已经不够满足我们的需求,我更推荐你使用更匿名的操作系统:

Qubes OS: https://www.qubes-os.org/

你可以看一下谁对它比较推崇

1.jpg

Tails: https://tails.boum.org/install/download/index.en.html

2.jpg

whonix: https://www.whonix.org/wiki/Main_Page

3.jpg

使用公共网络

Wifislax

http://www.wifislax.com/

如果你不了解它你可能不太了解无线网络攻击审计

4.jpg

学会变得相对匿名:

研究深入的匿名人员都知道它并非100%的匿名,也有迹可寻,但有什么能比使用tor网络进行黑客攻击更完美的呢?在使用tor的时候为了预防别人监控出口节点,我们可以破解他人的wifi或者公共网络,然后使用vpn再连接tor,这样的话,我无法保证你100%安全,但我也很怀疑追捕的程度要付出多大才能知道你,请使用它。

5.jpg

攻击面:

当你锁定你的目标,你必须将这个网撒到最大,也就是攻击面,当你的攻击面越大,你的成功的机会就越大,你的突破口就越多,对方暴露在你视角下的位置也就越多。当持球者进行突破的时候,如果你只看对位者,那就算你过掉他后面还有层层防御等着你;但是如果你直接看到进攻篮筐的路线,第一个对位者往往面临巨大的心理压力而且可以很容易被你过掉。

6.jpg

攻击面的信息收集:

常规的子域名枚举,谷歌敏感信息收集,whois正反查询,指纹和开放端口等之外的,我强烈推荐你进行社会工程学攻击。

nsa.jpg

弱点总是来自它的本身:

对于一个目标人物而言,它所在的工作单位,简单的官网开放浏览你就可以搜集到很多有用的信息,对目标组织也一样适用。进一步的,你可以通过web或者服务器层面的漏洞利用(通常的防护不可能面面俱到,你需要细心发现它们的薄弱处),甚至是弱口令进入他们的邮箱系统,oa系统,财务系统,业务处理系统,进入企业内网的vpn密码放在使用说明的概率也非常之大;通过目标本身的问题进行攻击,往往很难追溯也最让对方头疼,因为他自己是看不到自己的牙缝有韭菜的。

8.jpg

对组织网站的后缀文件收集:

通过猜测文件的后缀格式结合搜索引擎可以收集的有电话,手机号,履历,住址,出生年月等等。从泄露的数据库查找密码,进行尝试,或者改造后尝试。领英,企业注册关系,很容易的看到目标的社交网络。

 

 

对于隐私数据存放敏感的组织进行渗透:

不要忘了求职网站,这类网站投递的简历往往是隐私攻击的高利用点通常防护性不高,我的同僚曾有投递某安全企业简历,没过几分钟就有诈骗电话(伪装号码)打进要求提供身份证和住址学校信息,可见有些求职网站早已经跌入黑产圈。

 9.jpg

 

熟悉浏览器攻击:

当你没有0day的时候,钓鱼链接和页面往往能对安全意识薄弱的用户进行获得通入目标基地的钥匙,不要忽略它的强大,就算是一个信息安全顾问,他的妻子很可能就对计算机网络毫无兴趣。

 10.jpg

时间的争抢就是我们的战斗:

更多的学会收集office(word)和浏览器(IE,firefox,chrome)的exp,当一个漏洞的出现,到漏洞补丁的出现,到目标修复漏洞之前的这个时间段往往是攻击最高效的时区,学会打好这个时间战是一个网络战人员必须具备的素养。

 11.jpg

学习最先进的技术(漏洞利用)能迅速的成为一只攻击手:

今年是2018年,我强烈的不介意你去学习2016年之前的技术,你应该从当下开始从各大安全网站,漏洞数据库进行检索学习,选取有效的漏洞进行学习如何去利用,然后反复测试该漏洞针对当下的效率如何,被修复的程度占百分之几,是政府,企业,组织,学校还是什么类别目标常存在的漏洞而容易忽视,针对性学习针对性攻击。

 12.jpg

关注本质存在的问题让你时刻具备威胁:

暴力破解,弱口令,还有大规模的人使用xp,还有70%网络使用者并不会更新系统补丁,他们甚至讨厌防护软件的查杀干扰他们的办公,任有相当基数大的群体相信这样那样可以中奖,123456的背后包含着该组织的重要口令,文件,密码,如果一个软件的使用者收到软件官网送来的最新试用版会多么乐意的使用它(其实是破解版),而它真实有效(只是藏着监听后门)或者它没有效果,失望的把它删除,但是后门已经在运作,那么你要了解绕过防护软件的技术可能必须掌握。

 13.jpg

学会成为目标的邻居:

当然我们可以破解他的无线网络,进行嗅探;一个组织或者企业的公共网络往往是开放的,但是这不妨碍我们进行劫持获得一大堆账号密码口令从中选择有用的进行利用;例如一个认证网络登陆的口令页面往往是http,劫持到的明文账号密码可以轻易的让你进入内网漫游,甚至该账号密码就是他们工作平台的通行口令,财务的通行口令,邮箱的通行口令。无法破解怎么办?这不妨碍我们进行攻击,架设伪造热点,例如目标企业的覆盖无线网是test,那你伪造一个test-5G员工往往会以为网络进行了加速升级,而无需输入密码使它变得更便捷。

 14.jpg

其它操作的细化:我非常乐意你关注我的[email protected],我会在空余时间将对技术点进行短视频的录制和讲解,非常乐意为你提升你的技能库。

 

在过去的犯罪往往要付出高额代价和危险的犯罪模式,而在大数据和互联网的时代,网络战争已经成为了主旋律,如果再要发生一次世界大战,那么必然是网络战,或者说它的硝烟已经开始弥漫。而apt攻击人员是一种具有高威胁的黑客阶层,它不同于传统黑客的低威胁能力,需要有强大的意识和组织,属于”The hacker army” or “The hacker killer”。你永远不会知道apt攻击人员的真实身份和他们来自何处,就像杀手永远不会宣称自己是杀手,而真正的黑客永远不被人所知。

 

针对于网络战的攻击人员,简单的kali linux,parrotos,cyborg,blackarch的匿名性可能已经不够满足我们的需求,我更推荐你使用更匿名的操作系统:

Qubes OS: https://www.qubes-os.org/

你可以看一下谁对它比较推崇

1.jpg

Tails: https://tails.boum.org/install/download/index.en.html

2.jpg

whonix: https://www.whonix.org/wiki/Main_Page

3.jpg

使用公共网络

Wifislax

http://www.wifislax.com/

如果你不了解它你可能不太了解无线网络攻击审计

4.jpg

学会变得相对匿名:

研究深入的匿名人员都知道它并非100%的匿名,也有迹可寻,但有什么能比使用tor网络进行黑客攻击更完美的呢?在使用tor的时候为了预防别人监控出口节点,我们可以破解他人的wifi或者公共网络,然后使用vpn再连接tor,这样的话,我无法保证你100%安全,但我也很怀疑追捕的程度要付出多大才能知道你,请使用它。

吉利服.jpg

攻击面:

当你锁定你的目标,你必须将这个网撒到最大,也就是攻击面,当你的攻击面越大,你的成功的机会就越大,你的突破口就越多,对方暴露在你视角下的位置也就越多。当持球者进行突破的时候,如果你只看对位者,那就算你过掉他后面还有层层防御等着你;但是如果你直接看到进攻篮筐的路线,第一个对位者往往面临巨大的心理压力而且可以很容易被你过掉。

6.jpg

攻击面的信息收集:

常规的子域名枚举,谷歌敏感信息收集,whois正反查询,指纹和开放端口等之外的,我强烈推荐你进行社会工程学攻击。

nsa.jpg

弱点总是来自它的本身:

对于一个目标人物而言,它所在的工作单位,简单的官网开放浏览你就可以搜集到很多有用的信息,对目标组织也一样适用。进一步的,你可以通过弱口令进入他们的邮箱系统,oa系统,财务系统,业务处理系统,进入企业内网的vpn弱口令的概率和密码放在使用说明的概率也非常之大;通过目标本身的问题进行攻击,往往很难追溯也最让对方头疼,因为他自己是看不到自己的牙缝有韭菜的。

8.jpg

对组织网站的后缀文件收集:

通过猜测文件的后缀格式结合搜索引擎可以收集的有电话,手机号,履历,住址,出生年月等等。从泄露的数据库查找密码,进行尝试,或者改造后尝试。领英,企业注册关系,很容易的看到目标的社交网络。

 

 

对于隐私数据存放敏感的组织进行渗透:

不要忘了求职网站,这类网站投递的简历往往是隐私攻击的高利用点通常防护性不高,我的同僚曾有投递某安全企业简历,没过几分钟就有诈骗电话(伪装号码)打进要求提供身份证和住址学校信息,可见有些求职网站早已经跌入黑产圈。

 9.jpg

 

熟悉浏览器攻击:

当你没有0day的时候,钓鱼链接和页面往往能对安全意识薄弱的用户进行获得通入目标基地的钥匙,不要忽略它的强大,就算是一个信息安全顾问,他的妻子很可能就对计算机网络毫无兴趣。

 10.jpg

时间的争抢就是我们的战斗:

更多的学会收集office(word)和浏览器(IE,firefox,chrome)的exp,当一个漏洞的出现,到漏洞补丁的出现,到目标修复漏洞之前的这个时间段往往是攻击最高效的时区,学会打好这个时间战是一个网络战人员必须具备的素养。

 11.jpg

学习最先进的技术(漏洞利用)能迅速的成为一只攻击手:

今年是2018年,我强烈的不介意你去学习2016年之前的技术,你应该从当下开始从各大安全网站,漏洞数据库进行检索学习,选取有效的漏洞进行学习如何去利用,然后反复测试该漏洞针对当下的效率如何,被修复的程度占百分之几,是政府,企业,组织,学校还是什么类别目标常存在的漏洞而容易忽视,针对性学习针对性攻击。

 12.jpg

关注本质存在的问题让你时刻具备威胁:

暴力破解,弱口令,还有大规模的人使用xp,还有70%网络使用者并不会更新系统补丁,他们甚至讨厌防护软件的查杀干扰他们的办公,任有相当基数大的群体相信这样那样可以中奖,123456的背后包含着该组织的重要口令,文件,密码,如果一个软件的使用者收到软件官网送来的最新试用版会多么乐意的使用它(其实是破解版),而它真实有效(只是藏着监听后门)或者它没有效果,失望的把它删除,但是后门已经在运作,那么你要了解绕过防护软件的技术可能必须掌握。

 13.jpg

学会成为目标的邻居:

当然我们可以破解他的无线网络,进行嗅探;一个组织或者企业的公共网络往往是开放的,但是这不妨碍我们进行劫持获得一大堆账号密码口令从中选择有用的进行利用;例如一个认证网络登陆的口令页面往往是http,劫持到的明文账号密码可以轻易的让你进入内网漫游,甚至该账号密码就是他们工作平台的通行口令,财务的通行口令,邮箱的通行口令。无法破解怎么办?这不妨碍我们进行攻击,架设伪造热点,例如目标企业的覆盖无线网是test,那你伪造一个test-5G员工往往会以为网络进行了加速升级,而无需输入密码使它变得更便捷。

 14.jpg

其它操作的细化:我非常乐意你关注我的[email protected],我会在空余时间将对技术点进行短视频的录制和讲解,非常乐意为你提升你的技能库。

 

NLP是AI安全领域的一个重要支撑技术。本文讲介绍NLP中的Word2Vec模型和Doc2Vec模型。

Word2Vec

Word2Vec是Google在2013年开源的一款将词表征为实数值向量的高效工具,采用的模型有CBOW(Continuous Bag-Of-Words,即连续的词袋模型)和Skip-Gram 两种。Word2Vec通过训练,可以把对文本内容的处理简化为K维向量空间中的向量运算,而向量空间上的相似度可以用来表示文本语义上的相似度。因此,Word2Vec 输出的词向量可以被用来做很多NLP相关的工作,比如聚类、找同义词、词性分析等等。

image.png

CBOW和Skip-gram原理图

CBOW模型能够根据输入周围n-1个词来预测出这个词本身,而Skip-gram模型能够根据词本身来预测周围有哪些词。也就是说,CBOW模型的输入是某个词A周围的n个单词的词向量之和,输出是词A本身的词向量,而Skip-gram模型的输入是词A本身,输出是词A周围的n个单词的词向量。Word2Vec最常用的开源实现之一就是gensim,网址为:

http://radimrehurek.com/gensim/

gensim的安装非常简单:

pip install –upgrade gensim

gensim的使用非常简洁,加载数据和训练数据可以合并,训练好模型后就可以按照单词获取对应的向量表示:

sentences = [['first', 'sentence'], ['second', 'sentence']]model = gensim.models.Word2Vec(sentences, min_count=1)print model['first']

其中Word2Vec有很多可以影响训练速度和质量的参数。第一个参数可以对字典做截断,少于min_count次数的单词会被丢弃掉, 默认值为5:

model = Word2Vec(sentences, min_count=10)

另外一个是神经网络的隐藏层的单元数,推荐值为几十到几百。事实上Word2Vec参数的个数也与神经网络的隐藏层的单元数相同,比如:

size=200

那么训练得到的Word2Vec参数个数也是200:

model = Word2Vec(sentences, size=200)

以处理IMDB数据集为例,初始化Word2Vec对象,设置神经网络的隐藏层的单元数为200,生成的词向量的维度也与神经网络的隐藏层的单元数相同。设置处理的窗口大小为8个单词,出现少于10次数的单词会被丢弃掉,迭代计算次数为10次,同时并发线程数与当前计算机的cpu个数相同:

model=gensim.models.Word2Vec(size=200, window=8, min_count=10, iter=10, workers=cores)

其中当前计算机的cpu个数可以使用multiprocessing获取:

cores=multiprocessing.cpu_count()

创建字典并开始训练获取Word2Vec。gensim的官方文档中强调增加训练次数可以提高生成的Word2Vec的质量,可以通过设置epochs参数来提高训练次数,默认的训练次数为5:

x=x_train+x_testmodel.build_vocab(x)
model.train(x, total_examples=model.corpus_count, epochs=model.iter)

经过训练后,Word2Vec会以字典的形式保存在model对象中,可以使用类似字典的方式直接访问获取,比如获取单词“love”的Word2Vec就可以使用如下形式:

model[“love”]

Word2Vec的维度与之前设置的神经网络的隐藏层的单元数相同为200,也就是说是一个长度为200的一维向量。通过遍历一段英文,逐次获取每个单词对应的Word2Vec,连接起来就可以获得该英文段落对应的Word2Vec:

def getVecsByWord2Vec(model, corpus, size):
    x=[]
    for text in corpus:
        xx = []
        for i, vv in enumerate(text):
            try:
                xx.append(model[vv].reshape((1,size)))
            except KeyError:
                continue
        x = np.concatenate(xx)
    x=np.array(x, dtype='float')
    return x

需要注意的是,出于性能的考虑,我们将出现少于10次数的单词会被丢弃掉,所以存在这种情况,就是一部分单词找不到对应的Word2Vec,所以需要捕捉这个异常,通常使用python的KeyError异常捕捉即可。

Doc2Vec

基于上述的Word2Vec的方法,Quoc Le 和Tomas Mikolov又给出了Doc2Vec的训练方法。如下图所示,其原理与Word2Vec相同,分为Distributed Memory (DM) 和Distributed Bag of Words (DBOW)。

image.png

DM和DBOW原理图

以处理IMDB数据集为例,初始化Doc2Vec对象,设置神经网络的隐藏层的单元数为200,生成的词向量的维度也与神经网络的隐藏层的单元数相同。设置处理的窗口大小为8个单词,出现少于10次数的单词会被丢弃掉,迭代计算次数为10次,同时并发线程数与当前计算机的cpu个数相同:

model=Doc2Vec(dm=0, dbow_words=1, size=max_features, window=8, min_count=10, iter=10, workers=cores)

其中需要强调的是,dm为使用的算法,默认为1,表明使用DM算法,设置为0表明使用DBOW算法,通常使用默认配置即可,比如: model = gensim.models.Doc2Vec.Doc2Vec(size=50, min_count=2, iter=10)与Word2Vec不同的地方是,Doc2Vec处理的每个英文段落,需要使用一个唯一的标识标记,并且使用一种特殊定义的数据格式保存需要处理的英文段落,这种数据格式定义如下:

SentimentDocument = namedtuple('SentimentDocument', 'words tags')

其中SentimentDocument可以理解为这种格式的名称,也可以理解为这种对象的名称,words会保存英文段落,并且是以单词和符合列表的形式保存,tags就是我们说的保存的唯一标识。最简单的一种实现就是依次给每个英文段落编号,训练数据集的标记为“TRAIN数字”,训练数据集的标记为“TEST数字”:

def labelizeReviews(reviews, label_type):
    labelized = []
    for i, v in enumerate(reviews):
        label = '%s_%s' % (label_type, i)
        labelized.append(SentimentDocument(v, [label]))
    return labelized

创建字典并开始训练获取Doc2Vec。与Word2Vec的情况一样,gensim的官方文档中强调增加训练次数可以提高生成的Doc2Vec的质量,可以通过设置epochs参数来提高训练次数,默认的训练次数为5:

x=x_train+x_test
model.build_vocab(x)
model.train(x, total_examples=model.corpus_count, epochs=model.iter)

经过训练后,Doc2Vec会以字典的形式保存在model对象中,可以使用类似字典的方式直接访问获取,比如获取段落“I love tensorflow”的Doc2Vec就可以使用如下形式:

model.docvecs[”I love tensorflow”]

一个典型的doc2ver展开为向量形式,内容如下所示,为了显示方便只展示了其中一部分维度的数据:

array([ 0.02664499, 0.00475204, -0.03981256, 0.03796276, -0.03206162, 0.10963056, -0.04897128, 0.00151982, -0.03258783, 0.04711508, -0.00667155, -0.08523653, -0.02975186, 0.00166316, 0.01915652, -0.03415785, -0.05794788, 0.05110953, 0.01623618, -0.00512495, -0.06385455, -0.0151557 , 0.00365376, 0.03015811, 0.0229462 , 0.03176891, 0.01117626, -0.00743352, 0.02030453, -0.05072152, -0.00498496, 0.00151227, 0.06122205, -0.01811385, -0.01715777, 0.04883198, 0.03925886, -0.03568915, 0.00805744, 0.01654406, -0.05160677, 0.0119908 , -0.01527433, 0.02209963, -0.10316766, -0.01069367, -0.02432527, 0.00761799, 0.02763799, -0.04288232], dtype=float32)

Doc2Vec的维度与之前设置的神经网络的隐藏层的单元数相同为200,也就是说是一个长度为200的一维向量。以英文段落为单位,通过遍历训练数据集和测试数据集,逐次获取每个英文段落对应的Doc2Vec,这里的英文段落就可以理解为数据集中针对电影的一段评价:

def getVecs(model, corpus, size):
    vecs = [np.array(model.docvecs[z.tags[0]]).reshape((1, size)) for z in corpus]
    return np.array(np.concatenate(vecs),dtype='float')

训练Word2Vec和Doc2Vec是非常费时费力的过程,调试阶段会频繁更换分类算法以及修改分类算法参数调优,为了提高效率,可以把之前训练得到的Word2Vec和Doc2Vec模型保存成文件形式,以Doc2Vec为例,使用model.save函数把训练后的结果保存在本地硬盘上,运行程序时,在初始化Doc2Vec对象之前,可以先判断本地硬盘是否存在模型文件,如果存在就直接读取模型文件初始化Doc2Vec对象,反之则需要训练数据:

if os.path.exists(doc2ver_bin):
    print "Find cache file %s" % doc2ver_bin
    model=Doc2Vec.load(doc2ver_bin)
else:
    model=Doc2Vec(size=max_features, window=5, min_count=2, workers=cores,iter=40)
    model.build_vocab(x))
    model.train(x, total_examples=model.corpus_count, epochs=model.iter)
    model.save(doc2ver_bin)

有兴趣的读者可以关注我的AI安全书籍(京东有售)以及我的公众号 兜哥带你学安全

image.pngimage.png

image.png

NLP是AI安全领域的一个重要支撑技术。本文讲介绍NLP中的Word2Vec模型和Doc2Vec模型。

Word2Vec

Word2Vec是Google在2013年开源的一款将词表征为实数值向量的高效工具,采用的模型有CBOW(Continuous Bag-Of-Words,即连续的词袋模型)和Skip-Gram 两种。Word2Vec通过训练,可以把对文本内容的处理简化为K维向量空间中的向量运算,而向量空间上的相似度可以用来表示文本语义上的相似度。因此,Word2Vec 输出的词向量可以被用来做很多NLP相关的工作,比如聚类、找同义词、词性分析等等。

image.png

CBOW和Skip-gram原理图

CBOW模型能够根据输入周围n-1个词来预测出这个词本身,而Skip-gram模型能够根据词本身来预测周围有哪些词。也就是说,CBOW模型的输入是某个词A周围的n个单词的词向量之和,输出是词A本身的词向量,而Skip-gram模型的输入是词A本身,输出是词A周围的n个单词的词向量。Word2Vec最常用的开源实现之一就是gensim,网址为:

http://radimrehurek.com/gensim/

gensim的安装非常简单:

pip install –upgrade gensim

gensim的使用非常简洁,加载数据和训练数据可以合并,训练好模型后就可以按照单词获取对应的向量表示:

sentences = [['first', 'sentence'], ['second', 'sentence']]model = gensim.models.Word2Vec(sentences, min_count=1)print model['first']

其中Word2Vec有很多可以影响训练速度和质量的参数。第一个参数可以对字典做截断,少于min_count次数的单词会被丢弃掉, 默认值为5:

model = Word2Vec(sentences, min_count=10)

另外一个是神经网络的隐藏层的单元数,推荐值为几十到几百。事实上Word2Vec参数的个数也与神经网络的隐藏层的单元数相同,比如:

size=200

那么训练得到的Word2Vec参数个数也是200:

model = Word2Vec(sentences, size=200)

以处理IMDB数据集为例,初始化Word2Vec对象,设置神经网络的隐藏层的单元数为200,生成的词向量的维度也与神经网络的隐藏层的单元数相同。设置处理的窗口大小为8个单词,出现少于10次数的单词会被丢弃掉,迭代计算次数为10次,同时并发线程数与当前计算机的cpu个数相同:

model=gensim.models.Word2Vec(size=200, window=8, min_count=10, iter=10, workers=cores)

其中当前计算机的cpu个数可以使用multiprocessing获取:

cores=multiprocessing.cpu_count()

创建字典并开始训练获取Word2Vec。gensim的官方文档中强调增加训练次数可以提高生成的Word2Vec的质量,可以通过设置epochs参数来提高训练次数,默认的训练次数为5:

x=x_train+x_testmodel.build_vocab(x)
model.train(x, total_examples=model.corpus_count, epochs=model.iter)

经过训练后,Word2Vec会以字典的形式保存在model对象中,可以使用类似字典的方式直接访问获取,比如获取单词“love”的Word2Vec就可以使用如下形式:

model[“love”]

Word2Vec的维度与之前设置的神经网络的隐藏层的单元数相同为200,也就是说是一个长度为200的一维向量。通过遍历一段英文,逐次获取每个单词对应的Word2Vec,连接起来就可以获得该英文段落对应的Word2Vec:

def getVecsByWord2Vec(model, corpus, size):
    x=[]
    for text in corpus:
        xx = []
        for i, vv in enumerate(text):
            try:
                xx.append(model[vv].reshape((1,size)))
            except KeyError:
                continue
        x = np.concatenate(xx)
    x=np.array(x, dtype='float')
    return x

需要注意的是,出于性能的考虑,我们将出现少于10次数的单词会被丢弃掉,所以存在这种情况,就是一部分单词找不到对应的Word2Vec,所以需要捕捉这个异常,通常使用python的KeyError异常捕捉即可。

Doc2Vec

基于上述的Word2Vec的方法,Quoc Le 和Tomas Mikolov又给出了Doc2Vec的训练方法。如下图所示,其原理与Word2Vec相同,分为Distributed Memory (DM) 和Distributed Bag of Words (DBOW)。

image.png

DM和DBOW原理图

以处理IMDB数据集为例,初始化Doc2Vec对象,设置神经网络的隐藏层的单元数为200,生成的词向量的维度也与神经网络的隐藏层的单元数相同。设置处理的窗口大小为8个单词,出现少于10次数的单词会被丢弃掉,迭代计算次数为10次,同时并发线程数与当前计算机的cpu个数相同:

model=Doc2Vec(dm=0, dbow_words=1, size=max_features, window=8, min_count=10, iter=10, workers=cores)

其中需要强调的是,dm为使用的算法,默认为1,表明使用DM算法,设置为0表明使用DBOW算法,通常使用默认配置即可,比如: model = gensim.models.Doc2Vec.Doc2Vec(size=50, min_count=2, iter=10)与Word2Vec不同的地方是,Doc2Vec处理的每个英文段落,需要使用一个唯一的标识标记,并且使用一种特殊定义的数据格式保存需要处理的英文段落,这种数据格式定义如下:

SentimentDocument = namedtuple('SentimentDocument', 'words tags')

其中SentimentDocument可以理解为这种格式的名称,也可以理解为这种对象的名称,words会保存英文段落,并且是以单词和符合列表的形式保存,tags就是我们说的保存的唯一标识。最简单的一种实现就是依次给每个英文段落编号,训练数据集的标记为“TRAIN数字”,训练数据集的标记为“TEST数字”:

def labelizeReviews(reviews, label_type):
    labelized = []
    for i, v in enumerate(reviews):
        label = '%s_%s' % (label_type, i)
        labelized.append(SentimentDocument(v, [label]))
    return labelized

创建字典并开始训练获取Doc2Vec。与Word2Vec的情况一样,gensim的官方文档中强调增加训练次数可以提高生成的Doc2Vec的质量,可以通过设置epochs参数来提高训练次数,默认的训练次数为5:

x=x_train+x_test
model.build_vocab(x)
model.train(x, total_examples=model.corpus_count, epochs=model.iter)

经过训练后,Doc2Vec会以字典的形式保存在model对象中,可以使用类似字典的方式直接访问获取,比如获取段落“I love tensorflow”的Doc2Vec就可以使用如下形式:

model.docvecs[”I love tensorflow”]

一个典型的doc2ver展开为向量形式,内容如下所示,为了显示方便只展示了其中一部分维度的数据:

array([ 0.02664499, 0.00475204, -0.03981256, 0.03796276, -0.03206162, 0.10963056, -0.04897128, 0.00151982, -0.03258783, 0.04711508, -0.00667155, -0.08523653, -0.02975186, 0.00166316, 0.01915652, -0.03415785, -0.05794788, 0.05110953, 0.01623618, -0.00512495, -0.06385455, -0.0151557 , 0.00365376, 0.03015811, 0.0229462 , 0.03176891, 0.01117626, -0.00743352, 0.02030453, -0.05072152, -0.00498496, 0.00151227, 0.06122205, -0.01811385, -0.01715777, 0.04883198, 0.03925886, -0.03568915, 0.00805744, 0.01654406, -0.05160677, 0.0119908 , -0.01527433, 0.02209963, -0.10316766, -0.01069367, -0.02432527, 0.00761799, 0.02763799, -0.04288232], dtype=float32)

Doc2Vec的维度与之前设置的神经网络的隐藏层的单元数相同为200,也就是说是一个长度为200的一维向量。以英文段落为单位,通过遍历训练数据集和测试数据集,逐次获取每个英文段落对应的Doc2Vec,这里的英文段落就可以理解为数据集中针对电影的一段评价:

def getVecs(model, corpus, size):
    vecs = [np.array(model.docvecs[z.tags[0]]).reshape((1, size)) for z in corpus]
    return np.array(np.concatenate(vecs),dtype='float')

训练Word2Vec和Doc2Vec是非常费时费力的过程,调试阶段会频繁更换分类算法以及修改分类算法参数调优,为了提高效率,可以把之前训练得到的Word2Vec和Doc2Vec模型保存成文件形式,以Doc2Vec为例,使用model.save函数把训练后的结果保存在本地硬盘上,运行程序时,在初始化Doc2Vec对象之前,可以先判断本地硬盘是否存在模型文件,如果存在就直接读取模型文件初始化Doc2Vec对象,反之则需要训练数据:

if os.path.exists(doc2ver_bin):
    print "Find cache file %s" % doc2ver_bin
    model=Doc2Vec.load(doc2ver_bin)
else:
    model=Doc2Vec(size=max_features, window=5, min_count=2, workers=cores,iter=40)
    model.build_vocab(x))
    model.train(x, total_examples=model.corpus_count, epochs=model.iter)
    model.save(doc2ver_bin)

有兴趣的读者可以关注我的AI安全书籍(京东有售)以及我的公众号 兜哥带你学安全

image.pngimage.png

image.png

NLP是AI安全领域的一个重要支撑技术。本文讲介绍NLP中的Word2Vec模型和Doc2Vec模型。

Word2Vec

Word2Vec是Google在2013年开源的一款将词表征为实数值向量的高效工具,采用的模型有CBOW(Continuous Bag-Of-Words,即连续的词袋模型)和Skip-Gram 两种。Word2Vec通过训练,可以把对文本内容的处理简化为K维向量空间中的向量运算,而向量空间上的相似度可以用来表示文本语义上的相似度。因此,Word2Vec 输出的词向量可以被用来做很多NLP相关的工作,比如聚类、找同义词、词性分析等等。

image.png

CBOW和Skip-gram原理图

CBOW模型能够根据输入周围n-1个词来预测出这个词本身,而Skip-gram模型能够根据词本身来预测周围有哪些词。也就是说,CBOW模型的输入是某个词A周围的n个单词的词向量之和,输出是词A本身的词向量,而Skip-gram模型的输入是词A本身,输出是词A周围的n个单词的词向量。Word2Vec最常用的开源实现之一就是gensim,网址为:

http://radimrehurek.com/gensim/

gensim的安装非常简单:

pip install –upgrade gensim

gensim的使用非常简洁,加载数据和训练数据可以合并,训练好模型后就可以按照单词获取对应的向量表示:

sentences = [['first', 'sentence'], ['second', 'sentence']]model = gensim.models.Word2Vec(sentences, min_count=1)print model['first']

其中Word2Vec有很多可以影响训练速度和质量的参数。第一个参数可以对字典做截断,少于min_count次数的单词会被丢弃掉, 默认值为5:

model = Word2Vec(sentences, min_count=10)

另外一个是神经网络的隐藏层的单元数,推荐值为几十到几百。事实上Word2Vec参数的个数也与神经网络的隐藏层的单元数相同,比如:

size=200

那么训练得到的Word2Vec参数个数也是200:

model = Word2Vec(sentences, size=200)

以处理IMDB数据集为例,初始化Word2Vec对象,设置神经网络的隐藏层的单元数为200,生成的词向量的维度也与神经网络的隐藏层的单元数相同。设置处理的窗口大小为8个单词,出现少于10次数的单词会被丢弃掉,迭代计算次数为10次,同时并发线程数与当前计算机的cpu个数相同:

model=gensim.models.Word2Vec(size=200, window=8, min_count=10, iter=10, workers=cores)

其中当前计算机的cpu个数可以使用multiprocessing获取:

cores=multiprocessing.cpu_count()

创建字典并开始训练获取Word2Vec。gensim的官方文档中强调增加训练次数可以提高生成的Word2Vec的质量,可以通过设置epochs参数来提高训练次数,默认的训练次数为5:

x=x_train+x_testmodel.build_vocab(x)
model.train(x, total_examples=model.corpus_count, epochs=model.iter)

经过训练后,Word2Vec会以字典的形式保存在model对象中,可以使用类似字典的方式直接访问获取,比如获取单词“love”的Word2Vec就可以使用如下形式:

model[“love”]

Word2Vec的维度与之前设置的神经网络的隐藏层的单元数相同为200,也就是说是一个长度为200的一维向量。通过遍历一段英文,逐次获取每个单词对应的Word2Vec,连接起来就可以获得该英文段落对应的Word2Vec:

def getVecsByWord2Vec(model, corpus, size):
    x=[]
    for text in corpus:
        xx = []
        for i, vv in enumerate(text):
            try:
                xx.append(model[vv].reshape((1,size)))
            except KeyError:
                continue
        x = np.concatenate(xx)
    x=np.array(x, dtype='float')
    return x

需要注意的是,出于性能的考虑,我们将出现少于10次数的单词会被丢弃掉,所以存在这种情况,就是一部分单词找不到对应的Word2Vec,所以需要捕捉这个异常,通常使用python的KeyError异常捕捉即可。

Doc2Vec

基于上述的Word2Vec的方法,Quoc Le 和Tomas Mikolov又给出了Doc2Vec的训练方法。如下图所示,其原理与Word2Vec相同,分为Distributed Memory (DM) 和Distributed Bag of Words (DBOW)。

image.png

DM和DBOW原理图

以处理IMDB数据集为例,初始化Doc2Vec对象,设置神经网络的隐藏层的单元数为200,生成的词向量的维度也与神经网络的隐藏层的单元数相同。设置处理的窗口大小为8个单词,出现少于10次数的单词会被丢弃掉,迭代计算次数为10次,同时并发线程数与当前计算机的cpu个数相同:

model=Doc2Vec(dm=0, dbow_words=1, size=max_features, window=8, min_count=10, iter=10, workers=cores)

其中需要强调的是,dm为使用的算法,默认为1,表明使用DM算法,设置为0表明使用DBOW算法,通常使用默认配置即可,比如: model = gensim.models.Doc2Vec.Doc2Vec(size=50, min_count=2, iter=10)与Word2Vec不同的地方是,Doc2Vec处理的每个英文段落,需要使用一个唯一的标识标记,并且使用一种特殊定义的数据格式保存需要处理的英文段落,这种数据格式定义如下:

SentimentDocument = namedtuple('SentimentDocument', 'words tags')

其中SentimentDocument可以理解为这种格式的名称,也可以理解为这种对象的名称,words会保存英文段落,并且是以单词和符合列表的形式保存,tags就是我们说的保存的唯一标识。最简单的一种实现就是依次给每个英文段落编号,训练数据集的标记为“TRAIN数字”,训练数据集的标记为“TEST数字”:

def labelizeReviews(reviews, label_type):
    labelized = []
    for i, v in enumerate(reviews):
        label = '%s_%s' % (label_type, i)
        labelized.append(SentimentDocument(v, [label]))
    return labelized

创建字典并开始训练获取Doc2Vec。与Word2Vec的情况一样,gensim的官方文档中强调增加训练次数可以提高生成的Doc2Vec的质量,可以通过设置epochs参数来提高训练次数,默认的训练次数为5:

x=x_train+x_test
model.build_vocab(x)
model.train(x, total_examples=model.corpus_count, epochs=model.iter)

经过训练后,Doc2Vec会以字典的形式保存在model对象中,可以使用类似字典的方式直接访问获取,比如获取段落“I love tensorflow”的Doc2Vec就可以使用如下形式:

model.docvecs[”I love tensorflow”]

一个典型的doc2ver展开为向量形式,内容如下所示,为了显示方便只展示了其中一部分维度的数据:

array([ 0.02664499, 0.00475204, -0.03981256, 0.03796276, -0.03206162, 0.10963056, -0.04897128, 0.00151982, -0.03258783, 0.04711508, -0.00667155, -0.08523653, -0.02975186, 0.00166316, 0.01915652, -0.03415785, -0.05794788, 0.05110953, 0.01623618, -0.00512495, -0.06385455, -0.0151557 , 0.00365376, 0.03015811, 0.0229462 , 0.03176891, 0.01117626, -0.00743352, 0.02030453, -0.05072152, -0.00498496, 0.00151227, 0.06122205, -0.01811385, -0.01715777, 0.04883198, 0.03925886, -0.03568915, 0.00805744, 0.01654406, -0.05160677, 0.0119908 , -0.01527433, 0.02209963, -0.10316766, -0.01069367, -0.02432527, 0.00761799, 0.02763799, -0.04288232], dtype=float32)

Doc2Vec的维度与之前设置的神经网络的隐藏层的单元数相同为200,也就是说是一个长度为200的一维向量。以英文段落为单位,通过遍历训练数据集和测试数据集,逐次获取每个英文段落对应的Doc2Vec,这里的英文段落就可以理解为数据集中针对电影的一段评价:

def getVecs(model, corpus, size):
    vecs = [np.array(model.docvecs[z.tags[0]]).reshape((1, size)) for z in corpus]
    return np.array(np.concatenate(vecs),dtype='float')

训练Word2Vec和Doc2Vec是非常费时费力的过程,调试阶段会频繁更换分类算法以及修改分类算法参数调优,为了提高效率,可以把之前训练得到的Word2Vec和Doc2Vec模型保存成文件形式,以Doc2Vec为例,使用model.save函数把训练后的结果保存在本地硬盘上,运行程序时,在初始化Doc2Vec对象之前,可以先判断本地硬盘是否存在模型文件,如果存在就直接读取模型文件初始化Doc2Vec对象,反之则需要训练数据:

if os.path.exists(doc2ver_bin):
    print "Find cache file %s" % doc2ver_bin
    model=Doc2Vec.load(doc2ver_bin)
else:
    model=Doc2Vec(size=max_features, window=5, min_count=2, workers=cores,iter=40)
    model.build_vocab(x))
    model.train(x, total_examples=model.corpus_count, epochs=model.iter)
    model.save(doc2ver_bin)

截图.png

有兴趣的读者可以关注我的AI安全书籍(京东有售)以及我的公众号 兜哥带你学安全

image.pngimage.png

image.png

NLP是AI安全领域的一个重要支撑技术。本文讲介绍NLP中的词袋和TF-IDF模型。

词袋模型

文本特征提取有两个非常重要的模型:

  • 词集模型:单词构成的集合,集合自然每个元素都只有一个,也即词集中的每个单词都只有一个。

  • 词袋模型:在词集的基础上如果一个单词在文档中出现不止一次,统计其出现的次数(频数)。

两者本质上的区别,词袋是在词集的基础上增加了频率的维度,词集只关注有和没有,词袋还要关注有几个。

假设我们要对一篇文章进行特征化,最常见的方式就是词袋。

导入相关的函数库:

from sklearn.feature_extraction.text import CountVectorizer

实例化分词对象:

vectorizer = CountVectorizer(min_df=1)

vectorizer                    

CountVectorizer(analyzer=...'word', binary=False, decode_error=...'strict',

        dtype=<... 'numpy.int64'>, encoding=...'utf-8', input=...'content',

        lowercase=True, max_df=1.0, max_features=None, min_df=1,

        ngram_range=(1, 1), preprocessor=None, stop_words=None,

        strip_accents=None, token_pattern=...'(?u)\\b\\w\\w+\\b',

        tokenizer=None, vocabulary=None)

将文本进行词袋处理:

corpus = [

...     'This is the first document.',

...     'This is the second second document.',

...     'And the third one.',

...     'Is this the first document?',

... ]

X = vectorizer.fit_transform(corpus)

X                             

<4x9 sparse matrix of type '<... 'numpy.int64'>'

    with 19 stored elements in Compressed Sparse ... format>

获取对应的特征名称:

>>> vectorizer.get_feature_names() == (

...     ['and', 'document', 'first', 'is', 'one',

...      'second', 'the', 'third', 'this'])

True

获取词袋数据,至此我们已经完成了词袋化:

>>> X.toarray()          

array([[0, 1, 1, 1, 0, 0, 1, 0, 1],

       [0, 1, 0, 1, 0, 2, 1, 0, 1],

       [1, 0, 0, 0, 1, 0, 1, 1, 0],

       [0, 1, 1, 1, 0, 0, 1, 0, 1]]...)

但是如何可以使用现有的词袋的特征,对其他文本进行特征提取呢?我们定义词袋的特征空间叫做词汇表vocabulary:

vocabulary=vectorizer.vocabulary_

针对其他文本进行词袋处理时,可以直接使用现有的词汇表:

 new_vectorizer = CountVectorizer(min_df=1, vocabulary=vocabulary)

CountVectorize函数比较重要的几个参数为:

  • decode_error,处理解码失败的方式,分为‘strict’、‘ignore’、‘replace’三种方式。

  • strip_accents,在预处理步骤中移除重音的方式。

  • max_features,词袋特征个数的最大值。

  • stop_words,判断word结束的方式。

  • max_df,df最大值。

  • min_df,df最小值 。

  • binary,默认为False,当与TF-IDF结合使用时需要设置为True。

本例中处理的数据集均为英文,所以针对解码失败直接忽略,使用ignore方式,stop_words的方式使用english,strip_accents方式为ascii方式。

TF-IDF模型

文本处理领域还有一种特征提取方法,叫做TF-IDF模型(term frequency–inverse document frequency,词频与逆向文件频率)。TF-IDF是一种统计方法,用以评估某一字词对于一个文件集或一个语料库的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。TF-IDF加权的各种形式常被搜索引擎应用,作为文件与用户查询之间相关程度的度量或评级。

TF-IDF的主要思想是,如果某个词或短语在一篇文章中出现的频率TF(Term Frequency,词频),词频高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。TF-IDF实际上是:TF * IDF。TF表示词条在文档d中出现的频率。IDF(inverse document frequency,逆向文件频率)的主要思想是:如果包含词条t的文档越少,也就是n越小,IDF越大,则说明词条t具有很好的类别区分能力。如果某一类文档C中包含词条t的文档数为m,而其他类包含t的文档总数为k,显然所有包含t的文档数n=m+k,当m大的时候,n也大,按照IDF公式得到的IDF的值会小,就说明该词条t类别区分能力不强。但是实际上,如果一个词条在一个类的文档中频繁出现,则说明该词条能够很好代表这个类的文本的特征,这样的词条应该给它们赋予较高的权重,并选来作为该类文本的特征词以区别与其他类文档。

在Scikit-Learn中实现了TF-IDF算法,实例化TfidfTransformer即可:

from sklearn.feature_extraction.text import TfidfTransformer

transformer = TfidfTransformer(smooth_idf=False)

transformer    

TfidfTransformer(norm=...'l2', smooth_idf=False, sublinear_tf=False, use_idf=True)

TF-IDF模型通常和词袋模型配合使用,对词袋模型生成的数组进一步处理:

>>> counts = [[3, 0, 1],

...           [2, 0, 0],

...           [3, 0, 0],

...           [4, 0, 0],

...           [3, 2, 0],

...           [3, 0, 2]]

...

 >>> tfidf = transformer.fit_transform(counts)

>>> tfidf                         

<6x3 sparse matrix of type '<... 'numpy.float64'>'     with 9 stored elements in Compressed Sparse ... format> 

>>> tfidf.toarray()                         

array([[ 0.81940995,  0.        ,  0.57320793],       

[ 1.        ,  0.        ,  0.        ],      

[ 1.        ,  0.        ,  0.        ],  

[ 1.        ,  0.        ,  0.        ],       

[ 0.47330339,  0.88089948,  0.        ],       

[ 0.58149261,  0.        ,  0.81355169]])

词汇表模型

词袋模型可以很好的表现文本由哪些单词组成,但是却无法表达出单词之间的前后关系,于是人们借鉴了词袋模型的思想,使用生成的词汇表对原有句子按照单词逐个进行编码。TensorFlow默认支持了这种模型:

tf.contrib.learn.preprocessing.VocabularyProcessor (

                                          max_document_length,    

                                          min_frequency=0,

                                          vocabulary=None,

                                          tokenizer_fn=None)

其中各个参数的含义为:

  • max_document_length:,文档的最大长度。如果文本的长度大于最大长度,那么它会被剪切,反之则用0填充。

  • min_frequency,词频的最小值,出现次数小于最小词频则不会被收录到词表中。

  • vocabulary,CategoricalVocabulary 对象。

  • tokenizer_fn,分词函数。

假设有如下句子需要处理:

x_text =[

    'i love you',

    'me too'

]

基于以上句子生成词汇表,并对’i me too’这句话进行编码:

vocab_processor = learn.preprocessing.VocabularyProcessor(max_document_length)

vocab_processor.fit(x_text)

print next(vocab_processor.transform(['i me too'])).tolist()

x = np.array(list(vocab_processor.fit_transform(x_text)))

print x

运行程序,x_text使用词汇表编码后的数据为:

 [[1 2 3 0]

 [4 5 0 0]]

‘i me too’这句话编码的结果为:

[1, 4, 5, 0]

整个过程如下图所示。

截图.png

有兴趣的读者可以关注我的AI安全书籍(京东有售)以及我的公众号 兜哥带你学安全

image.pngimage.png

image.png