PH第9天:AI CTF解析

最近,机器学习安全性话题大肆宣传,我想谈一谈它的实用性。 其次,很酷的原因是PHDays ,来自信息安全领域的众多专家齐聚一堂,并且有机会引起人们对该主题的关注。

总的来说,我们做了一个基于任务的CTF,任务会影响使用机器学习技术的部分安全风险。



什么是CTF ???
Capture The Flag(CTF)是一个非常受欢迎的计算机安全竞赛(作为数据中心专家的嘲笑竞赛而流行)。 有两种格式:任务(危险区域)和服务(攻击防御)。 我们做了任务。

经典任务竞赛类似于“您的游戏”的形式。 当存在一组具有不同成本的不同类别的任务时。

CTF中的传统类别为:Web-Web漏洞,反向-反向工程,加密-密码,stegano-隐写术,pwn-二进制利用。

团队(从1到n人)可以解决任务,无论谁解决很多问题,都是很好的伙伴。

我们的比赛持续了一天多。 据了解,这是个人-一个人的团队。 我希望人们参加会议来彼此了解。 因此,必须在几个小时内解决任务,不需要大量的计算资源,但是,困难的任务也必须是-并非所有人都必须赢:D

结果,我们完成了6个任务(第七个任务很有趣),看来一个人一天就足够了。 不幸的是,这些任务本身不再可用。 但是也许在阅读分析之后,您想下次参加吗?



我要对没有CTF的那些人表示深深的感谢: @groke@mostobriv 。 在开始之前的一个晚上,最酷的想法,技术解决方案和一个部署聚会–在一家了不起的公司中,这会变得更加美丽吗? :)

Stegano:Aww-100




tiny.cc/6fj06y

Dan从3 391张猫和狗的图片收集的数据集。



该任务被标记为“ Stegano”。 缝作业涉及隐藏一些信息。 似乎很容易猜到猫和狗是二进制的。 经过一番思考,我们可以假定猫和狗的序列可以是某种二进制消息。 假设海豹将是1,而狗是-0。如果突然不起作用,您可以简单地交换它们。 接下来,我们找到训练有素的模型,对猫和狗进行分类。 关于猫和狗分类的课程有很多例子,后面还有经过训练的模型-您可以在github上找到经过训练的模型。 我们采用训练有素的模型,在极端情况下,我们会自我训练。 我们将每个图像预测为0或1。然后,此“字节”序列将转换为字符串。

您可以在此处查看作者的解决方案
import time
import sys
import os
import numpy as np
from keras.models import load_model
from keras.preprocessing import image
data_path = "../data/"
picture_path = data_path + "{}.jpg"
CLASSES = [1, 0]
def run(model_path):
pictures_names = os.listdir(data_path)
pic_num = len(pictures_names)
model = load_model(model_path)
res = []
for pic in range(pic_num):
img = image.load_img(picture_path.format(pic), target_size=(224,224))
x = image.img_to_array(img)
x = np.expand_dims(x, axis=0)
preds = model.predict(x)
y_classes = preds.argmax(axis=-1)
res.append(CLASSES[y_classes[0]])
res = ''.join(map(str, res))
n = int("0b" + res, 2)
text = n.to_bytes((n.bit_length() + 7) // 8, 'big').decode()
print(text)
if __name__ == '__main__':
if len(sys.argv) < 2:
print("path to the model expected")
exit(1)
run(sys.argv[1])
view raw aww_solver.py hosted with ❤ by GitHub


我们得到包含标志“ AICTF {533m5_y0u_und3r574nd_4n1m4l5}”的文本。

但是,由于某些原因,一些参与者在不同的时间试图通过带有“已通过”一词的奇怪标志。 我们不知道他们从哪里得到的,如果参与者突然解释,那将很酷:D

注意事项




该服务是一种“博客”,每个用户都可以留下公共条目和私人条目。 由于功能很小-不难猜测您需要以某种方式获得私人唱片。

实际上只有一个输入字段-记录ID。
怎么办

安全防护人员首先想到的是尝试sql注入。 但是,据说该服务受AI保护。 而且我无法发送简单的sql注入。 该服务以“尝试入侵!”对这种攻击做出了回应。 许多人试图像旗帜一样传递它,但真的以为一切都那么简单吗?

测试的背后是一个LSTM网络,该网络分析了id以进行sql注入。 但是,LSTM的输入必须为固定长度。 为简单起见,我们将其限制为20个字符。 也就是说,逻辑是这样的:如果请求超过20个字符,我们接受请求-我们将其截断并检查其余部分(如果少于20个字符,则添加0)。

因此,实际上,简单的sql-injection不能立即起作用。
但是,有机会找到网络看不到的矢量,并提出了良好的要求。

新Edge QR阅读器




有必要识别QR码:



要执行任务的文件在这里

给出了几个加密文件。 其中有一个pyc文件,通过反转可以很明显地看到一个功能,通过该功能的代码可以理解,所有必需的文件都在密钥上进行了AES加密,这是从该函数的字节码及其内部的另一个字节码中接收到的。

有两种可能的解决方案:解析pyc文件并获得函数的实现,或者制作自己的hashlib代理模块,该模块将输出其参数并运行它,您可以获取密钥,然后解密文件并运行QR阅读器,该阅读器将建议的图片识别为标志。

排名第三的参与者的详细决定可以在这里找到:


预测挑战




该服务是像kaggle上的一种竞争。 可以注册,下载数据和上传模型,它们已在私人数据上进行了测试,结果记录在了记分板上。

目标似乎很明显-获得1.0精度。

有困难吗? 不可能:D

数据是随机生成的,当然,这暗示必须以其他方式获得这种准确性。 该服务接受了.pickle格式的模型。 似乎每个人都已经知道了,但是事实证明并非每个人都可以通过泡菜获得RCE ,但是还有什么比这更糟的呢?

尼基塔的决定(konodyuk)


实际上,必须这样做! 获得了对服务器的远程访问权限之后,就可以下载测试解决方案的数据,重新训练模型并获得1.0精度以及其标志。

摄影




顾名思义,该服务会对图像进行处理。
令人惊叹的应用程序界面建议上传照片。



作为响应,已将具有更改样式和竞赛徽标的图像发送给您。



旗帜在哪里?

在CTF上遇到常见漏洞似乎很普遍-这次是Image Tragick 。 但是,几乎没有人猜测或尝试过每个人都被利用。

新时代杀毒软件


事实证明,这项任务是艰巨的任务,并且尚未解决。 尽管与参与者交谈之后,事实证明他们非常接近答案。



任务文件可以在这里查看

系统接收python字节码并在家执行。 但是,当然,她不会仅仅这样做,因为有一个“ AI”。 他检查python的版本,不允许出现“错误”。 如果代码通过了测试,它将在服务器上启动-这意味着您可以获得很多信息。

解释器提供的字节码可以逐位稀释,并且检查的神经网络会丢失(也是LSTM),或者您可以在末尾添加一堆垃圾。

此外,当您知道如何执行Python代码时,就可以检测到从根目录启动的服务器上的`flag_reader` Binar。 二进制文件具有格式字符串漏洞,可以通过该漏洞读取标志。

您也可以在此处找到Nikita的解决方案(konodyuk)。

总结


比赛结束时,有130个注册,14个至少通过了一个标志,并且解决了6个任务中的5个-这意味着我们设法平衡了复杂和简单的任务。
考虑到我们并没有像第一次那样非常广泛地传播信息,也不会为沉重的负担做好准备,所以我们仍然认为超级成功的竞争应该是。

所获奖项:

  • 第一名-无声
  • 第二名-Kurmur
  • 第三名-konodyuk

获胜者将在PHDays的第二天结束时获得荣誉和奖项,包括AWS DeepLens,Coral Dev Board和带有会议徽标的背包。

通常玩经典CTF且现在喜欢机器学习的家伙对我们的比赛进行了评分,因此我们希望下次对安全性感兴趣的数据科学家加入。

Source: https://habr.com/ru/post/zh-CN454206/


All Articles