Hacking with GPT-3

自从GPT-3开放API之后,出现了各种脑洞demo,开始挑战认知极限。

英语 到 LaTeX 翻译机

十秒生成一个Google首页

快速设计原型

自然语言到Shell命令互译

还可以帮忙写代码

最近,国外白帽子Ron和Filedescriptor,获得了GPT-3 API的内测资格,先恭喜他们。

他们使用GPT-3 API 对一些漏洞挖掘的场景进行了测试,来看看GPT-3能够给漏洞挖掘带来什么样的能力。

你还能想到网络安全中的哪些场景可以用GPT-3尝试解决呢?欢迎留言和分享。你也可以点击最后的阅读原文关注他们。

GPT-3 API出来之后,我就去申请了试用,目前为止没有通过。国外的开发者拿到试用资格的也比较少。GPT-3除了翻译之外并不支持中文处理,还得再等等。我以前也写过关于GPT-3的文章,可供参考。

如果你认为GPT-3使程序员淘汰,那你大概率不写代码

我也用GPT-2中文版生成过零分作文,可以看看生成的质量如何,也提供了GPT-2的使用教程。

零分作文《生活在树上》

最新Bin2Code框架CodeCMR解读

去年看过一篇用图神经网络进行二进制代码相似性分析的论文,主要的目标是把同一份源代码通过不同的编译器,不同的平台,不同的优化选项得到的不同的二进制代码找出来,有兴趣的同学可以看下论文和官方介绍。

论文链接: https://keenlab.tencent.com/en/whitepapers/Ordermatters.pdf

官方介绍:https://keenlab.tencent.com/zh/2019/12/10/Tencent-Keen-Security-Lab-Order-Matters/

最近他们又发了一篇论文,这次在上面任务的基础上升级了,主要是解决给出二进制代码,得到源代码的问题,这给了我这个逆向分析菜鸟一些希望。

论文提出了一个Bin2Code的端到端匹配框架CodeCMR,我们先来看看数据集。

训练的数据集主要由gcc-x64-O0和clang-arm-O3作为两种组合方式,生成了两个30000/10000/10000的训练/验证/测试集。

数据集下载:

https://github.com/binaryai/CodeCMR

我随便取了一个数据:

一个数据集有33列,包括了不同编译器(gcc,clang),不同平台(x86 / x64 / arm / arm64)和不同编译选项的(O1 / O2 / O3)的32种组合。

Index([‘c_label’, ‘gcc-x86-O0’, ‘gcc-x86-O1’, ‘gcc-x86-O2’, ‘gcc-x86-O3’,
‘gcc-x64-O0’, ‘gcc-x64-O1’, ‘gcc-x64-O2’, ‘gcc-x64-O3’, ‘gcc-arm-O0’,
‘gcc-arm-O1’, ‘gcc-arm-O2’, ‘gcc-arm-O3’, ‘gcc-arm64-O0’,
‘gcc-arm64-O1’, ‘gcc-arm64-O2’, ‘gcc-arm64-O3’, ‘clang-x86-O0’,
‘clang-x86-O1’, ‘clang-x86-O2’, ‘clang-x86-O3’, ‘clang-x64-O0’,
‘clang-x64-O1’, ‘clang-x64-O2’, ‘clang-x64-O3’, ‘clang-arm-O0’,
‘clang-arm-O1’, ‘clang-arm-O2’, ‘clang-arm-O3’, ‘clang-arm64-O0’,
‘clang-arm64-O1’, ‘clang-arm64-O2’, ‘clang-arm64-O3’],
dtype=’object’)

我取的源代码是:

static int dump_headers(FILE *inp)
 {
         struct bsid sid;
  while(!ensure_read(&sid, inp))
         {
   size_t s=0;
   dump_sid(&sid);
 s=(sid.Size)+(sid.dwStreamNameSize);
   if(skip_data(inp, s)) return -1;
  }
  return 0;
 }
对于的gcc-x64-O0.nx

seg000:0000000000000000 ; File Name   : \wsl\kali-linux\home\aipwn\Desktop\CodeCMR\CodeCMR\all-arch-nx\81313_1\gcc-x64-O0.nx
 seg000:0000000000000000 ; Format      : Binary file
 seg000:0000000000000000 ; Base Address: 0000h Range: 0000h - 0ADAh Loaded length: 00000ADAh
 seg000:0000000000000000
 seg000:0000000000000000                 .686p
 seg000:0000000000000000                 .mmx
 seg000:0000000000000000                 .model flat
 seg000:0000000000000000
 seg000:0000000000000000 ; ===========================================================================
 seg000:0000000000000000
 seg000:0000000000000000 ; Segment type: Pure code
 seg000:0000000000000000 seg000          segment byte public 'CODE' use64
 seg000:0000000000000000                 assume cs:seg000
 seg000:0000000000000000                 assume es:nothing, ss:nothing, ds:nothing, fs:nothing, gs:nothing
 seg000:0000000000000000                 db  80h ; €
 seg000:0000000000000001 ; ---------------------------------------------------------------------------
 seg000:0000000000000001                 add     al, 95h ; '
 seg000:0000000000000003                 iret
 seg000:0000000000000003 ; ---------------------------------------------------------------------------
 seg000:0000000000000004                 db  0Ah
 seg000:0000000000000005                 align 8
 seg000:0000000000000008                 dq 74656E188C000000h, 6C632E786B726F77h, 69642E7365737361h
 seg000:0000000000000008                 dq 78C946870617267h, 9468706172476944h, 28947D9481299493h
 seg000:0000000000000008                 dq 73696C6A64611A8Ch, 5F72656E6E695F74h, 6361665F74636964h
 seg000:0000000000000008                 dq 62088C9479726F74h, 94736E69746C6975h, 939474636964048Ch
 seg000:0000000000000008                 dq 5F65646F6E118C94h, 6361665F74636964h, 8C08689479726F74h
 seg000:0000000000000008                 dq 74615F6567646516h, 5F746369645F7274h, 9479726F74636166h
 seg000:0000000000000008                 dq 646F6E5F058C0868h, 7D014B28947D9465h, 5F776172088C2894h
 seg000:0000000000000008                 dq 17C589461746164h, 12030202E310000h, 20202002776F6C20h
 seg000:0000000000000008                 dq 6C6C616320012020h, 75736E6524070120h, 2646165725F6572h
 seg000:0000000000000008                 dq 747361663C090107h, 36746E695F5F223Ah, 2826202231612034h
 seg000:0000000000000008                 dq 325F726176250C01h, 222C382E290C0230h, 32612A20454C4946h
 seg000:0000000000000008                 dq 2E69647205012022h, 7D317B0401050238h, 20902382E3E0402h
 seg000:0000000000000008                 dq 12009022C090120h, 502342E78616505h, 104027D367B0401h
 seg000:0000000000000008                 dq 20393433203B2004h, 2C382E6964723D75h, 2C574F4C424C4728h
clang-arm-O3.nx
seg000:0000000000000000 ; File Name   : \wsl\kali-linux\home\aipwn\Desktop\CodeCMR\CodeCMR\all-arch-nx\81313_1\clang-arm-O3.nx
 seg000:0000000000000000 ; Format      : Binary file
 seg000:0000000000000000 ; Base Address: 0000h Range: 0000h - 0809h Loaded length: 00000809h
 seg000:0000000000000000
 seg000:0000000000000000                 .686p
 seg000:0000000000000000                 .mmx
 seg000:0000000000000000                 .model flat
 seg000:0000000000000000
 seg000:0000000000000000 ; ===========================================================================
 seg000:0000000000000000
 seg000:0000000000000000 ; Segment type: Pure code
 seg000:0000000000000000 seg000          segment byte public 'CODE' use64
 seg000:0000000000000000                 assume cs:seg000
 seg000:0000000000000000                 assume es:nothing, ss:nothing, ds:nothing, fs:nothing, gs:nothing
 seg000:0000000000000000                 db  80h ; €
 seg000:0000000000000001                 db    4
 seg000:0000000000000002                 db  95h ; 
 seg000:0000000000000003                 dd offset byte_7FE
 seg000:0000000000000007                 align 8
 seg000:0000000000000008                 dq 74656E188C000000h, 6C632E786B726F77h, 69642E7365737361h
 seg000:0000000000000008                 dq 78C946870617267h, 9468706172476944h, 28947D9481299493h
 seg000:0000000000000008                 dq 73696C6A64611A8Ch, 5F72656E6E695F74h, 6361665F74636964h
 seg000:0000000000000008                 dq 62088C9479726F74h, 94736E69746C6975h, 939474636964048Ch
 seg000:0000000000000008                 dq 5F65646F6E118C94h, 6361665F74636964h, 8C08689479726F74h
 seg000:0000000000000008                 dq 74615F6567646516h, 5F746369645F7274h, 9479726F74636166h
 seg000:0000000000000008                 dq 646F6E5F058C0868h, 7D014B28947D9465h, 5F776172088C2894h
 seg000:0000000000000008                 dq 14C589461746164h, 12030202E310000h, 20202002766F6D20h
 seg000:0000000000000008                 dq 342E307205012020h, 27D317B04010502h, 12009022C090104h
 seg000:0000000000000008                 dq 10502342E357205h, 202004027D317B04h, 2004012020202020h
 seg000:0000000000000008                 dq 3D7520433433203Bh, 20202020342E3072h, 2E35723D64202020h
 seg000:0000000000000008                 dq 31202E310A040234h, 20027A6E6A200120h, 6163200120202020h
 seg000:0000000000000008                 dq 6E65240701206C6Ch, 6165725F65727573h, 61663C0901070264h
 seg000:0000000000000008                 dq 524F57445F3A7473h, 30250C0128262044h, 2C342E290C023078h
 seg000:0000000000000008                 dq 12044524F57445Fh, 10502342E307205h, 2E3E04027D317B04h

literal features

{‘c_str’: [], ‘c_expr’: [2, 65, 61, 57, 64, 52, 65, 2, 65, 35, 65, 65, 61, 48, 57, 64, 65, 35, 65, 65, 49, 48, 57, 64, 48, 52, 65, 65, 61], ‘m_int’: [0, 0, 4294967295, 0, 0], ‘c_state’: [71, 75, 71, 72, 72, 72, 73, 71, 80, 80], ‘c_int’: [0, 4294967295, 0]}


CFG features

[(1, [[10, 56, 79, 73, 83, 74, 73, 74], [55, 80, 73, 73]]), (2, [[4, 75, 73, 78], [56, 79, 73, 83], [12, 78, 8, 78, 73, 73, 78], [44, 10, 56, 79, 73, 74, 12, 78, 8, 78, 73, 73, 73, 73, 73, 75, 80]]), (3, [[4, 75, 73, 74], [55, 80, 73, 73]]), (4, [[10, 56, 79, 73, 83, 74, 73, 74]]), (5, [[44, 74, 75, 80]]), (6, [[4, 75, 73, 74]])]

literal features
{‘c_str’: [], ‘c_expr’: [2, 65, 65, 61, 57, 64, 52, 65, 65, 57, 64, 52, 65, 57, 64, 65, 35, 65, 65, 61, 57, 64, 52, 65, 65, 61, 61], ‘m_int’: [0, 0, 0, 0, 4294967295], ‘c_state’: [71, 72, 73, 71, 80, 75, 71, 72, 73, 71, 78, 73, 71, 80, 80], ‘c_int’: [0, 0, 1, -1]}

CFG features

[(1, [[4, 74, 73, 74], [43, 56, 79, 73, 83, 74, 75, 80]]), (2, [[56, 79, 73, 83], [43, 56, 79, 73, 74, 12, 78, 78, 73, 75, 80]]), (3, [[44, 56, 79, 73, 83, 74, 75, 80]]), (4, [[4, 75, 73, 74], [55, 80, 73, 73]]), (5, [[4, 75, 73, 74]])]

下面我们来看论文的内容

二进制代码和对于的源代码

首先要面对的问题是自动提取特征。除了字符串,立即数,代码里面的隐藏的语义特征很关键。

从模型上看,是把字符级别的源代码,字符串和立即数,二进制代码提取的控制流图,字符串和立即数,这三个不同的输入(语义特征、字符串特征、立即数特征)分别用模型计算得到向量,再用拼接得到代码向量。

再来看看分别处理输入的语义模型

处理源代码的模型是DPCNN,处理二进制代码的是GNN。

实验效果

论文链接:https://keenlab.tencent.com/zh/whitepapers/neurips-2020-cameraready.pdf

官方介绍:https://keenlab.tencent.com/zh/2020/11/03/neurips-2020-cameraready/

官方还出了一个IDA的插件,可以在逆向时使用,相信不久这篇论文的成果也会集成在这个工具里面,可以试用一下。

工具文档:https://binaryai.readthedocs.io/en/stable/

开篇词——你所不知道的神经网络攻防

你好,我是P小二,很高兴我又要更新了。

不出意外,你看到这篇的时候,2020年已过去一半。从7月份开始更新,是我立的FLAG。在这里,我想就整个专栏的安排说明一下,也算是给读者一些学习建议。

为什么要出这个专栏?

首先,因为我高兴。我想开一个AI安全的专栏来讨论这方面的学习进展。如果还写得不错,得到了几个赞许,也是大大的幸福感。

其实人们对AI的安全担忧早就有之,不过更多的是从伦理道德和工作层面上进行批判,宣扬AI威胁论。就现在所处的弱人工智能阶段来说,这些担心大可不必,随着深度学习大火,各种攻击AI系统的技术被发明发现,攻击者与防御者的博弈真正的开始了。未知攻焉知防,研究矛,加强盾是一条必经之路。

其次,AI安全是近些年才出现的热潮,世面上的资料质量参差不齐,特别是中文领域没有好的教程。如果能给后来者一些跳坑的经验之谈,已达到了目的。

我要学习,需要什么样的基础

在我看来,你不需要任何基础,你需要是强烈的学习兴趣。

如果你没有编程基础,可以通过网上的一些开源教程补充一些Python语法。
如果你计算机科班毕业,恭喜你,你可以补充一些机器学习的基础知识。
如果你正在读机器学习方向的研究生,太好了,把TF和Pytorch多多玩溜吧。
如果你是博士,欢迎你,加入我们读论文的队伍里来吧,特别需要您。

如果你是安全研究人员,Just do it,整就牛。

我认为的专栏特色

说说和一些课程相同的特色

  • 以实战为主,会有很多练习出现在专栏中
  • 有代码有解答,以jupyter notebook的形式输出
  • 跟进最新的研究进展,会去复现论文,跑通demo
  • 会尝试用视频形式输出,直观易懂

当然我也有不一样的特色,那就是会断更,静静等待就好。

专栏网址: http://aipwn.org/HackingNeuralNetworks
Github: https://github.com/AIPwn/HackingNeuralNetworks
公众号: P小二

知识星球: AI与安全

你可能需要的推荐资源

Python基础:

  • Python编程:从入门到实践
  • Python Cookbook
  • 流畅的Python

机器学习基础:

  • coursera课程: machine learning Standford Andrew Ng
  • coursera课程: Deep Learning Specialization deeplearning.ai
  • Deep Learning: Adaptive Computation and Machine Learning series
  • Deep Learning with Python
  • 动手学深度学习

计算机视觉:

  • cs231n

自然语言处理:

  • coursera课程: Natural Language Processing Specialization deeplearning.ai
  • cs224n
  • Deep Learning for NLP at Oxford with Deep Mind 2017

深度学习框架:

  • coursera课程: TensorFlow in Practice Specialization deeplearning.ai
  • 官方书: deep learning with pytorch
  • keras 官方文档

AI安全科普书:

  • Adversarial Machine Learning(中文版:对抗机器学习:机器学习系统中的攻击和防御)
  • AI安全之对抗样本入门
  • Web安全之强化学习与GAN
  • 人工智能安全

对抗样本比赛:

论文集合:

开源项目:

  • cleverhans
  • adversarial-robustness-toolbox
  • AdvBox
  • foolbox
  • OpenAttack

智能音箱的安全问题

随着近年语音识别相关技术的大发展,智能音箱作为人机交互的下一个主要的载体,正在逐渐敲开各家家门。但是智能音箱的安全问题,现在还未被大众和相关厂商重视。

智能音箱的安全问题主要分为两个大的块

  1. 传统的软件安全
  2. 与AI相关的算法安全

传统的软件安全

智能音箱作为一个软件存在,所有传统软件的安全问题都可能存在。包括固件的更新完整性保护,系统安全配置不当,系统补丁更新不及时,高危漏洞不修复等。前不久爆出某智能音箱产品把配置界面暴露在公网上。攻击者通过在线扫描进入就可收集本地网络信息,或者指定音响播放任意的音频文件。

智能音箱一般都有对应的APP,APP安全防护缺失,用户敏感信息明文传输等问题也需要注意。如果智能音箱还有其他的外部设备,比如摄像头,屏幕等,对文件,对网络协议的处理都可能出问题,更容易成为攻击的对象。如果音箱被黑客控制的话,就可能会变成窃听器,摄像头如果被黑掉,也可能被用来监视我们。前不久,微软语音助手Cortana被爆出可以攻击锁屏装下的Windows 10系统,可以执行任意代码,包括修改用户密码等。

AI算法安全

底层框架安全

深度学习框架的出现,让编写深度学习程序更佳的方便,也带来了一些安全问题。出现漏洞更多的是深度学习框架依赖的开源项目库。

上面列了一些深度学习框架所依赖的库,包括很多非常有名的开源项目。下面是这些开源项目的一些CVE列表。

如果是底层框架的漏洞,其破坏力是非常强大的。尽管开源社区在不断提高软件的质量,漏洞是很难避免的,厂商应该实时关注并及时修复相关漏洞。

内容安全

智能音响作为一个人机交互的产品,内容安全是非常重要的。对于输入和输出敏感的内容需要一个过滤系统来完成相关的处理。

如上图所示,智能音响的输出中,如果包含了难以接受的行为是非常影响用户体验。而如果训练的样本数据被污染,则可能会引发更大的问题,比如种族歧视言论等。

小冰训练的样本数据被污染

Tay 发表种族歧视的言论

模型安全

用于欺骗神经网络的对抗样本是最近比较热的研究方向。开始的对抗样本主要在计算机视觉领域流行,主要分为非定向攻击和定向攻击。

非定向攻击是指只要干扰分类的结果,在多分类的场景下,主要分类到其他的类别就算攻击成功。

单像素攻击是只修改一个像素就可将图片错误的分类的一种攻击手段
定向攻击是指对抗样本需要把分类的结果定向为指定的另一类结果

在上图中,鸟的图片被分类成为飞机,定向攻击成功

对抗样本生成方法如下图

图像识别

在智能音箱的场景下,可以攻击人脸识别场景。人脸识别中的对抗样本构造,如下图所示

语音识别

对于智能音箱来说,语音识别是最重要的基础功能,对于语音识别的攻击也有很多的进展。

攻击者可以轻易将指令伪装成轻微的失真噪音,植入你播放的音乐、视频或有利专注工作的白噪音等,让人耳无法察觉。秘密指令可以指示你的音箱做各种事情,比如拍照、打电话或者购物。


上图为攻击原理展示

有研究者也发现,只要将语音指令变成「海豚音」就能轻易骗过语音助手。方法是将人声语音指令转换为频率高于 20,000 Hz 的超声波,这是人耳完全听不见的声音,但智能喇叭都能听懂。

上图为研究团队攻击图声纹识别

现在越来越多的智能音响启用了声纹识别的功能,声纹识别系统也是可以被攻击的。

1.熟人模型攻击

熟人模仿你的声音去攻击你的声纹账号,通过概率会有提升

2.重放攻击

你的声音被录下来,然后在声纹登录时播放你的声音。此攻击可以被活体检测和随机内容声纹防范。

3.特定人声合成或者声音转换

利用机器学习、深度学习等技术,通过对目标人的一段录音进行建模,学习出目标人的声音特质并将其参数化,然后将非目标人的声音合成并转化为目标人的声音进行攻击。现在Google的Tacotron,百度的ClariNet等端到端的TTS方法的出现,极大的提高了声音合成的真实度,对声纹识别算法造成了潜在的威胁。

4.loT安全

智能音箱作为家庭的入口,对智能家居的控制是一个非常基础的功能。家庭里的一些智能设备的安全性亟待提高,包括对文件的处理,对网络协议的处理,各种外部输入协议的处理都可能会出问题。这种问题会通过智能音箱这个入口被放大,比如可以通过音箱控制智能锁,那么远程开锁是可以实现的。很多的智能音箱还可以控制车载的一些设备,对汽车的安全行驶也带来了威胁。

解决方案

作为厂商,开始考虑一个安全解决方案,都是需要有成本的考量。对于智能音箱的安全问题,厂商需要有足够的重视,在安全和成本之间选一个平衡点加以投入

应该重视传统的软件安全,比如硬件安全,app安全,服务器安全等,在这些传统的安全领域建立安全跟踪,测试和修复机制,杜绝自动化扫描器可以利用的漏洞出现。增大对用户相关的隐私保护,对内容过滤系统进行完善,提高用户体验。

对于AI算法安全,可以跟踪相关新闻并测试自家产品。如果是对安全要求较高的产品,比如金融支付类产品,需实时关注此类威胁,建立威胁情报平台及时响应未知威胁,减少攻击造成的损失。

对于个人用户,尽量选择知名厂家产品,包括智能音箱和loT设备,并根据说明书上的配置加以强化隐私保护。智能音箱所受到的欢迎,让国内外的厂商都积极的跟上研发自己的智能音箱产品。但是从另外一个角度来说,用户的隐私和安全是第一位的,只有研究好了攻,才知道怎么去防御它。

参考资源

  1. Audio Adversarial Examples: Targeted Attacks on Speech-to-Text https://arxiv.org/pdf/1801.01944.pdf
  2. CVE-2018-8140
    https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2018-8140
  3. The Need for Better Built-in Security in IoT Devices https://blog.trendmicro.com/trendlabs-security-intelligence/iot-devices-need-better-builtin-security/
  4. Security Risks in Deep Learning Implementations https://arxiv.org/pdf/1711.11008.pdf
  5. Threat of Adversarial Attacks on Deep Learning in Computer Vision: A Survey https://arxiv.org/abs/1801.00553
  6. One pixel attack for fooling deep neural networks https://arxiv.org/abs/1710.08864
  7. Tacotron : An end-to-end speech synthesis system by Google https://google.github.io/tacotron/

此文后记

此文写于2018年6月,很多内容已有最新发展,待后续更新

此文公众号链接: https://mp.weixin.qq.com/s/7E_b2ocxcrM-rAqETwFtHA
此文知乎专栏: https://zhuanlan.zhihu.com/p/68287747