2024 Let's GoSSIP
Let's GoSSIP 是由上交主办、蜚语科技赞助的暑期学校(惯例是从“大暑”节气那一天起),面向社会开放。暑校的形式是上交邀请国内外知名的安全研究团队,为学员举办讲座,力争在短短五天内让学员疯狂 hacking,感受安全研究的魅力!
Preface
2024 暑校是 Let's GoSSIP 的第十年,也是以实践为主旨的第一年,整个活动贯彻落实“纸上得来终觉浅,绝知此事要躬行”的思想,所以今年特别 crazy🪄
ps,相关通知均在“安全研究GoSSIP”微信公众号上发布(好消息是学生参加暑校费用减半~)

Day 1
July 22,硬件安全攻防实践,南方科大张锋巍团队
参考资料:
Background
任何一个系统都是分级别的
EL3 作为状态过渡的桥梁

打破权限隔离的方法是滥用调试接口(ps,high-level 来说 debug 分为入侵与非入侵两种,入侵意味着可以中断 / 控制调试目标)

Arm debug designer 认为被调试状态下的 TARGET 从低权限提权到高权限是一个合法的行为,或者说 designer suppose 这不是 arm 该管的事,应该是 SoC 该管的事(前提,调试 HOST 需要具备 EL1 权限)


Arm 提供了一种新颖的 debug 方式:Inter-processor Debugging,可以绕过物理接触(类似找旁站),就不需要 JTAG,但要求必须能控制多核设备中的某一个核(这个前提似乎有点苛刻?)
Practice
实验器材:
Raspberry Pi 3 model B+, a TF card with a corresponding USB connector, a power supply, and serial cables

根据实验指导,将给定镜像通过 Win32 磁盘映像工具写入 SD 卡(能独自发现这个”U盘“的用处也是很赞/了,第一次见读卡器www):


通过查阅树莓派相关网站和自带的纸质手册,才弄懂应该怎么插 SD 卡(被自己又菜到了hhh

根据指导与配图,进行连线


安装驱动:

检测不到 COM 可能有两个原因,一个是驱动未安装(安装后需重启、其他设备、隐藏设备、安装旧版本等方法均不起作用),另一个是物理电路连接不稳定
今天遇到的问题有两个:第一,驱动安装不了,80% 时间耗费在这里了,导致实验基本没有做,但是我觉得并不亏,因为自己还是坚持下来没有直接摆,帮助自己建立自信,以后才能成为一名真正的工程师;第二,不熟悉树莓派及相关配件,看着就直接干懵逼了(e.g. SD 卡烧录,但是通过大胆猜测小心求证解决了,很开心)。后面在意识到主机驱动有问题的情况下,产生放弃的想法。在请求别人帮助后,提示可以去试试用显示屏,看着树莓派 + 显示屏 + 鼠标 + 笔记本,没理清楚配置之间的逻辑关系,只能在那傻傻发呆,后面才意识过来可以把鼠标和显示屏接在树莓派上,在显示屏没有键盘接口的情况下,找工作人员与朋友借键盘(特别像第一天去实习,自己甚至都不懂怎么装电脑,该拿什么线)🤣

Day 2
July 23,从安全视角认识计算机系统,浙大常瑞团队
(介绍浙大的教学体系这一点,与本次暑校活动的相关性太差了,没有考虑受众,这种报告应该是给同行老师 / 向上汇报的,而不是给学生讲的;给的实验难度分布太不合理了,简单又太简单,困难又太过困难,压根没认真准备
参考资料:
Background
视角:硬件 CPU、OS、程序员
考虑功耗、性能之间的 balance
非安全是指使用该工具对程序员有很高的要求
介绍了一下工作 Atlas(背景:Android 测试有闭源 + 跨语言测试两个难点),但没有听出 insight 的亮点
形式化验证
来源:安全跟不上代码膨胀的速度,所以只能去 check
特点:无二义性、严格
作用:高度的抽象带来通用性
经过形式化验证的代码!=绝对正确,有可能建模本身并不完整
Practice
串口软硬件结合
被过分裁剪以至于过于简单,四行 C 代码结束了
卷积加速器
对应实验工程量太大,同时没有 lab 指南,不知道该干什么,skip
卷积在数学上是两个变量在某范围内相乘后求和的结果

// 一个极其简单的多通道卷积
#include <stdio.h>
#include <stdlib.h>
#define CHANNEL_H 3
#define CHANNEL_W 3
#define KERNEL_H 2
#define KERNEL_W 2
const int basis = 1;
int input_matrix1[CHANNEL_H][CHANNEL_W] = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
int input_matrix2[CHANNEL_H][CHANNEL_W] = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
int input_matrix3[CHANNEL_H][CHANNEL_W] = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
int red_kernel_matrix[KERNEL_H][KERNEL_W] = {
{1, 0},
{0, -1}
};
int green_kernel_matrix[KERNEL_H][KERNEL_W] = {
{0, 1},
{1, 0}
};
int blue_kernel_matrix[KERNEL_H][KERNEL_W] = {
{1, -1},
{1, -1}
};
void convolution(int output[CHANNEL_H][CHANNEL_W]) {
for (int i = 0; i < CHANNEL_H - KERNEL_H + 1; i++) {
for (int j = 0; j < CHANNEL_W - KERNEL_W + 1; j++) {
int sum1 = 0, sum2 = 0, sum3 = 0;
for (int k = 0; k < KERNEL_H; k++) {
for (int l = 0; l < KERNEL_W; l++) {
sum1 += input_matrix1[i + k][j + l] * red_kernel_matrix[k][l];
sum2 += input_matrix2[i + k][j + l] * green_kernel_matrix[k][l];
sum3 += input_matrix3[i + k][j + l] * blue_kernel_matrix[k][l];
}
}
output[i][j] = sum1 + sum2 + sum3;
printf("(%d, %d): sum = %d + %d + %d = %d\n", i, j, sum1, sum2, sum3, output[i][j]);
}
}
}
void display(int output[CHANNEL_H][CHANNEL_W]) {
for (int i = 0; i < CHANNEL_H - KERNEL_H + 1; i++) {
for (int j = 0; j < CHANNEL_W - KERNEL_W + 1; j++) {
printf("%d ", output[i][j]);
}
printf("\n");
}
}
int main() {
int output_matrix[CHANNEL_H][CHANNEL_W] = {0};
convolution(output_matrix);
display(output_matrix);
return 0;
}
Xpart
此项目为浙大一年半计算机系统课程的终极大作业,难度极高,skip
Day 3
July 24,AI安全攻防Lab,复旦潘旭东团队
(啥都不会,毫无头绪,坐牢一整天
Background
训练 AI 模型:
训练数据
对抗样本生成
key 在于找到能够提高误分类概率的微小扰动
分类:无目标攻击、有目标攻击
防御:降噪、聚类
Practice
Lab0:搭建攻击⽬标⸺经典卷积神经⽹络LeNet-5
根据 pytorch 的实验指导,正常训练一个模型
tip:在有多个版本的 python 情况下,默认 pip 不一定能给相应 python 装上 package,python -m pip
安装对应 python package
Lab1:误导AI模型⸺经典对抗样本⽣成算法FGSM
现在要干啥?生成对抗样本。怎么生成对抗样本?利用 FGSM 代码生成。找卡车图像,然后用模型去识别,能让模型错误预测就行了

扩展:DAN failed in GPT 4o && Gemini
Lab2:投毒攻击
类似于后门,让模型决策边界发生偏移
例如:标签反转、固定 Patch 投毒、干净标签攻击(Victim 与 Base 混合训练)
label flipping:
随机选取一部分训练集修改其标签,保存模型并在测试集上测试证明有效(降低模型的准确率)
修改某一特定类标签,保存模型并在训练集上进行集中测试,统计 success rate,证明有效
BadNet:
制作 trigger
选取少量样本展示添加 trigger 后的效果
在干净数据集上进行检验,测试后门的隐蔽性
进行投毒后再测试
干净样本攻击:

Lab3:隐私窃取
重要问题:
能否偷到模型原始训练数据?
能否推断某个数据是否存在某数据集中?
能否窃取模型的参数、架构、超参?
方法:梯度匹配

将真实梯度与虚假梯度的差作为损失函数,通过迭代的方法尝试求解最小值,过程类似于将计算性问题转化成判定性问题
Day 4
July 25,互联网基础设施安全实践,清华段海新团队(qianxin)
(今天非常有意思,很开心的一天,虽然又是小白被虐暴的剧情hhh
Background
THU NISL 一系列成果(亚洲第一世界第三)
Practice
利用掌握的安全分析知识,对此次事件进行分析,提交事件分析报告,尝试分析出攻击者的攻击手法、途径、残留样本、连接的C2、攻击者真实IP等所有与此次事件相关的线索,揪出幕后的攻击者!
DataCon 7.25由于本实验为内部实验,所以不公开相应 WP
Day 5
July 26,安全漏洞的时空穿越之旅,上交李卷孺团队
(时间太紧凑了,没给时间做
Background
Smashing The Stack For Fun And Profit
抛开所有的理论,返璞归真,想想计算机不就是去一个地方取值,译码后执行,如此循环往复(计算机只有 n 个寄存器的记忆)
如何提高性能?
把不会 C 的拉出去枪毙
不行就把 C 写得不好的拉出去枪毙
Morris Worm,1988/11/2,邮件提权、口令爆破、.rhosts feature
Bill Joy,UCB,1978,BSD
Ariel Futoransky,deattack.c,整数溢出导致越界写
Practice
Lab 1
So, we have 512 bytes of data, 16 bytes of stack frame to zero out, and 4 bytes for PC. That means 532 bytes total.
参考资料:
上古时代的计算机程序 C 占一大半,写 C 是一种浪漫。收获:增添了历史的视角去看计算机,不管是语言还是库的实现,在不同历史阶段是不同的

Lab 2
参考资料:
Last updated
Was this helpful?