CSE_lecture23:secure data flow

Secure Data Flow

taint tracking

为了防止数据暴露,希望系统具备观测数据流动的能力(taint training),即对数据进行标记

对于外部进入的数据,认为其不安全,设置taint status为true,从而标记出所有与外部数据相关的数据,如出现jump xxx,这个xxx的taint status为true,认为代码出现问题。taint的overhead极大,可能翻四十倍

taintdroid对taint的操作进行分层,高层只使用粗粒度的taint,包括对整个数据库、对整个文件、对整条消息加taint;而只对java虚拟机做细粒度的变量级的taint跟踪;而对于cpp库则提前进行分析,届时只需根据调用关系得到taint情况即可。这样就实现了性能的优化

defending malicious input

一个攻击者根据以下步骤寻找bug:

  • 寻找契机
  • 寻找冷门部分的bug,因为测试可能性很小
  • 设计input data,这是攻击者可控的
  • 追踪input data

taintcheck用于监测input data在使用taint后的整个流动过程。当用于IO量大时overhead受影响不够明显

secure channel

跨机器传输数据需要进行加密

对称加密为:

1
2
encript(key, message) -> ciphertext
encript(key, ciphertext) -> message

即加密和解密使用的密码一致

1
MAC(key, message) -> token

即使拥有key,也无法通过token得到message,类似于加密哈希。两者联合使用,可以在获取message的同时判断是否被篡改

问题在于replay attack可以窃取到发送的信息进行重发

通过在message中加入sequence来避免replay attack

此时reflection attack利用发送者和接收者的counter不一致,将发送者的消息发回发送者

使用两个密钥来进行加密,A给B发送的消息用key1加密,B给A发送的消息用key2加密

使用Diffie-Hellman key exchange让A和B共享密钥,A持有随机数a,B持有随机数b,共享质数p和随机数g后计算 $key = g^{ab} \ mod \ p$ 即可

但攻击者可以拦截key的分享过程,进而参与到A和B的通信过程中去

这种攻击方法无解,因此引入RSA,即非对称加密,使用其中一个密钥加密时,必须用另一个密钥解密

在加密和解密时,加密用公钥,解密用私钥;在签名和验证时,签名用私钥,验证用公钥

1
2
sign(secret_key, message) -> sig
verify(public_key, message, sig) -> yes/no

public_key公开,A给B通信时使用公钥发送消息,从而验证B的身份。获取途径为,B提供证书(CA),其记录公钥,并包含签名,届时即可验证该签名

privacy

既要保证使用数据,又要保证数据不被窃取

OT: obvious transfer

假设A持有两个电话号码,现在B希望获取其中之一,需要保证B不知道另一个电话号码,也不让A知道B选的哪个

DP: differential privacy

B持有每个人的详细工资信息,A希望进行统计,但需要保证A无法知道具体每个人的工资信息。为了防止A通过作差反推具体每个人的工资信息,只提供约数;同时限制提问次数

secret sharing

希望将秘密分为n份,当有k个人时即可恢复秘密

HE: homomorphic encryption

同态加密后的数据依然可以参与计算并提供给计算资源,届时解密即可

TEE: trusted execution environment

计算资源只在cache使用明文,memory放置密文,而cache极难窃取

process of bug report


CSE_lecture23:secure data flow
http://example.com/2025/12/29/CSE-lecture23-secure-data-flow/
作者
jietiDdd
发布于
2025年12月29日
许可协议