本笔记来自基友 加特-林
块加密的优缺点
Cryptographic modes
Electronic Codebook Mode密文与明文是一一映射的关系,很容易被破解(Each block of data was independently encrypted • With the same key • So two blocks with identical plaintext encrypt to the same ciphertext)
引入初始随机变量IV(随消息一起发送),与P1做异或(相同为0,不同为1),每一个块的密文都与下一个块明文做异或。初始变量单独放在分组的某一段上,这样多次加密同一原文,密文会不一样
解密就是第一个C1先解密,然后异或IV得出第一个原文块,然后依次解密后续块
上图中,发送者用 k1 加密消息,用 k2 生成 MAC tag,然后把加密消息c和 tag t 发给接收方;接收方用 k1 解密消息,用 k2 来验证消息是否被修改过。这样就达成了加密通讯。 不过这里存在一个问题:假如我们发送两次相同的信息,密文会不同,但 tag 会相同 (MAC is deterministic),这会泄露信息。
不过这个问题很好解决:我们不生成明文的 MAC,而是生成密文的 MAC,这样每次密文不同,tag 也不 同。而接收方收到消息后,需要先用密文验证MAC,再解密。
: {0,1}* → {0,1}n be a hash function (任意长度映射到固定长度)。
Hash function的三个 properties:
1. Preimage resistance:我们可以把任意的信息 M 映射为 hash value h,M 便是 h 的preimage。我们只能通过 M 计算出 h,无法通过 h 计算出 M (One-way function)
2. Second preimage resistance 给定一个 x,我们无法找到一个 ′ (′ ≠ ) 来使得 () = (′)。如果能,这个叫 weak collision resistant。
3. Collision resistance. collision 是指给定两个不同的输入 和 ′,它们的输出 () = (′)。如果我们无法找到这样的一对输入,那么 H 是 collision-resistance 的,这叫 strong collision resistance。
sender 计算 message M 的 hash value h,然后把 M 和 h 发给 receiver;receiver 再计算 M的 hash value,并与 h 作比较,如果一致,则消息没有被篡改。
Merkle tree:hash自顶向上堆叠的树
GROUP:Z*5={1,2,3,4} 质数5, finite group的order是组中元素的数量
cyclic group循环组 G of order m, and generator g: G={g0, g1,…,gm-1},g是G的generator
DH是一种密钥交换协议,用来产生一对公开密钥,这对密钥可用于对称式加密,原理如下:
Alice和Bob在不安全的信道中协商一个质数p和g, g 是 p的原根。
原根:设 m 是正整数,a是整数,若a模m的阶等于φ(m),则称 a 为 模m的一个原根。(其中φ(m)表示m的欧拉函数)任何小于m的数都可以用 a^n mod(m)的形式表示,所以原根也被称为循环组的生成根
a模m的阶:
φ(m) for an input x is the count of numbers in {1, 2, 3, …, n} that are relatively prime to x.
Alice和Bob分别选择一个只有自己知道的数a,b然后计算A,B并在公开的信道中进行交换
私钥加密体系设计到key-distribution and key-management的问题,所以公开密钥加密体系诞生。每个人都有两把钥匙,Pk是公钥,Sk是私钥
PA在非对称密钥加密中,选择明文攻击的流程Hybrid encryption:用非对称式密钥加密信息十分耗费时间,所以我们将对称式密钥引入非对称式密钥加密之中,k是对称式密钥,用k对明文进行加密后,用对方的公钥对k进行加密,然后将密文和加密后的k打包发送,接收方用自己的私钥获取密钥k。
CPA(Chosen-plaintext attack)选取适当的明文进行攻击,plain RSA不具有CPA security
数字签名主要是用来保证Integrity(包含了nonrepudiation and authenticity)
与MAC相比,虽然MAC也保证了integrity,但是MAC算法并不对外公开(如果不能接触到key,就无法验证tag),只有通信双方可以对消息进行验证。但是数字签名允许其他人(机构)通过获取发送方公钥来对消息进行验证,同时具备不可抵赖性Non-repudiation的性质。
但这样做的代价就是更耗时,更费计算资源,所以我们先对原文做Hash,然后用私钥去加密Abstract (刚计算的原文Hash), 再将原文和加密后的Abstract打包发送
Security protocols(有个概念就好)
A series of steps involving two or more parties designed to accomplish a task with suitable security (Sequence is important),such as setting up a key between two parities.
一个安全的交流密钥的方式protocol,这样每次交流session使用不同的加密密钥
The protocol aims to provide two or more parties communicating over an open network with a shared secret key.
该协议有两个categories:
假设存在一个arbitrator Trent, Alice 和Bob都相信Trent,并与Trent都各自共享一把密钥KA和KB
在Alice和Bob之间创建对称式密钥Ks的过程如下:
但这样的方式无法防范中间人攻击,假设attacker叫Mallory,她也是Trent受信任的用户,与其共享密钥KM:
这样能够成功的原因是没有保证Integrity,我们可以在第1步给发送的信息计算MAC或给消息加时间戳或人物标识。
此问题中,没有受信任的 arbitrator,Alice 和 Bob 互相发送他们的公钥。 Alice 生成一个会话密钥并将其发送给 Bob,用 Bob 的公钥加密,用Alice 的私钥签名;Bob 验证签名, 并用他的私钥解密 Alice 的消息,然后使用共享会话密钥加密会话。
这种方法也会受到中间人攻击,主要涉及到双方公钥是否可以可靠的交换,有两个办法可以解决:
PPT中讲的是ECDH,原理和DH算法差不多,有兴趣可以了解下
设计门锁(using private key tools):
最常见的用户验证就是通过password, OS 通过存储password Hash值对用户的密码进行验证,当用户输入密码时,OS计算相应密码的Hash值,并于密码本中的值进行对比。
Dictionary attacks: 假设attacker黑到了数据库中存储密码的文件,并且他有一本字典记载着常见密码对应的hash值,如果有用户使用这些密码,那么账户将被破解。
Salted passwords: 在计算密码hash值的时候,引入一个随机数,这个随机数需要被记录在密码文件中
S/Key One-Time Password:
服务器生成x, H(x), H2(x),…,Hn+1(x),
X到Hn(x)全部发给用户,服务器只存储Hn+1(x),
验证时,用户从Hn(x)开始使用,使用时服务器验证这个东西经过一次hash能够对上Hn+1(x),然后把Hn(x)存进服务器,下次用户使用的是Hn-1(x), 服务器验证能不能哈希对上Hn(x)。。。
只有授权实体(用户、程序、进程或其他系统)才允许使用系统
Access control implements a security policy that specifies who or what (e.g., in the case of a process) may have access to each specific system resource and the type of access that is permitted in each instance.
Access Control的三个基本组成元素:
Access Control Policies:
四种关于access control(Discretionary access control)的表达形式:
Discretionary access control
该策略仅由三个基本组成元素定义,*表示该权限可以被拥有的实体赋予给其他人
Role-Based Access Control (RBAC)
Users 在系统中可以对应多个Role,一个Role又对应多个objects/permissions。且是动态的,而DAC是基于用户的identity,是静态的两张表
RBAC0,RBAC1(role层次结构),RBAC2(加constraint),RBAC3(1+2)
RBAC2加入了Constraints
Attribute-Based Access Control (ABAC)
There are three key elements to an ABAC model:
• attributes
• policy model
• architecture model
Policies Model
A policy is a set of rules and relationships that govern allowable behavior within an organization, based on the privileges of subjects and how resources or objects are to be protected under which environment conditions.
A Rule 是一个boolean function,规定在给定了S,O,E的情况下,其属性是否满足访问的requirements
相比于RBAC(基于角色定义权限),ABAC更加的灵活,假设现在有个电影网站想要在用户的年龄的基础上,根据会员等级更改用户对电影的访问,用户的年龄段分为Child,Adult,Juvenile,会员等级分为regular,premium. RBAC则需要重新定义role表和权限表,因为引入了会员等级,但是ABAC只需要增加一个boolean function去判断用户是否是会员即可。
一种流行的恶意软件分类方法:首先了解它如何传播 (spreads or propagates) 以达到所需的目标,然后了解它在到达目标后执行的操作或有效载荷 (actions or payloads)。
第一种传播方式(Viruses)的代表就是Virus,通过感染现有的文件去传播到未被感染的文件。它通常将自己的代码置于另一个程序的执行路径中,这就意味着virus能做任何该程序可以做的事。同时它必须能自我复制。例如,它可能用受病毒感染的文件副本替换其他可执行文件。
如何检测病毒? - 通过判断文件大小,将病毒副本插进文件中会使文件增大(File-size based detection);但是压缩病毒可以避免被检测到。
第二种传播方式(Vulnerability Exploit)通过软件的漏洞和主动下载去进行传播,媒介可以是互联网,U盘或者是邮件里面的附件,代表是Worms。Worms以machine为单位去感染,而virus以file为单位去感染。
在传播阶段通常执行以下功能:
病毒virus和蠕虫worm对比:
术语terms经常互换使用•病毒virus试图感染其他程序•蠕虫worm试图从一台机器转移到另一台机器•不要沉迷于分类
第三种传播方式(Social Engineering)主要通过欺骗用户去协助自己的破坏,例如Spam / phishing e-mails / 有用的软件里面包含有害代码
Logic bomb:trigger,触发病毒,开始干坏事
第一种是Data destruction,通常涉及到事件的触发,我们将当事件被触发所需要执行的恶意代码称为logical bomb
第二种是Attack agent,通过夺取被感染电脑的控制权去发起网络攻击,例如DDOS
第三种是Information Theft,比较典型的例子是keylogger,通过监控键盘的输入去捕获敏感的信息,通常使用某种形式的过滤机制,仅返回接近关键字的信息(“login”,“password”)。再例如Phishing email,伪装为权威机构,并用一个与官方网站相似的网站去诱导用户输入他们的隐私信息。
第四种是stealthing,当老六,创造一些漏洞和允许一些非法软件的渗入
三个攻击的资源对象:
Flooding:此攻击的目的是压倒与目标组织的网络连接的容量
Source Address Spoofing: 使用大量伪造的源地址进行攻击。攻击者生成大量以目标系统为ip目标地址的数据包。由于源地址是伪造的,所以很难追踪。
这个问题可以通过引入SYN cookie解决:
服务器收到syn请求(第一次握手)后,会根据当前状态计算出一个cookie值。放在syn+ack报文(第二次握手)中发出,此时服务器并不会划分资源去维护这个半连接,当客户端返回ack报文(第三次握手)时会再次带上这个cookie值。服务端取出这个值进行验证。如果合法就认为连接建立成功,用cookie值重建连结。加入全连接队列中并正式分配资源。
DDOS Distributed Denial of Service
多机分布式攻击
反射攻击(Reflection Attack): 攻击者把自己的地址伪造成目标的地址,将数据包发送到服务器上的已知服务。当服务器响应时,响应将被发送到目标。相当于是让服务器 (reflector) 来进行攻击。特点是以小封包换大封包,小的request换大的response。
放大攻击(Amplication Attack):原理和反射攻击类似,攻击者把请求发送给服务器,服务器会将请求扩增 (比如使用广播机制),来发送给目标。特点是以少换多,以少封包换多封包,一个request换多个response。
Security Intrusion:试图访问受限内容,Intrusion Detection:检测出访问受限内容的事件
IDS有三个逻辑组成部分:
在行为上,合法用户(legitimate users)和入侵者(Intruder)存在交集,我们用Confusion Matrix去描述IDS的判断:
False positive: 合法用户的行为被识别为intrusion
False negative: 有intrusion,但没有被识别
True positive: 有intrusion且被识别
True negative: 没有intrusion且没有错误识别
三种检测入侵的方式:
2和3都是基于malicious pattern or behavior 进行建模,这种方式容易触发False negative,因为它们都需要预定义a set of signature patterns or a set of rules of data,对于没有被定义/没见过的入侵,系统无法识别。
第一种,HIDS,Host-Based Intrusion Detection在敏感系统里添加安全层,监控活动以检测可疑行为•主要目的是检测入侵、记录可疑事件并发送警报•可以检测外部和内部入侵。
Host agent module检测本机host,LAN monitor agent module检测整个LAN,Central manager module检测LAN和host
第二种,NIDS,Network-Based IDS,检测网络上的流量•实时逐包检查流量或应用程序级协议活动•包括多个传感器、一个用于NIDS管理的服务器和一个用于人机界面的管理控制台•随着加密通讯越来越多,这种方法无法正常工作。
Inline sensor:拦截并监听流量,Passive:不拦截,在旁路监听流量
第三种,结合上面两个
Honeypots:诱饵系统,旨在让攻击者在系统里停留足够长的时间来获取对攻击者的识别,并且向攻击者透露假/无意义的信息,low interaction:提供接口但不提供完整服务,提供低真实性目标。High interaction:完整的系统,被攻击者访问
A firewall is a network security system that monitors and controls incoming and outgoing network traffic based on predetermined security rules,Typically establishes a barrier between a trusted network and an untrusted network. Only authorized traffic as defined by the local security policy will be allowed to pass.
防火墙的限制:无法抵御绕过防火墙的攻击•可能无法完全抵御内部威胁•笔记本电脑或便携式存储设备可能在公司网络外部被感染,然后在内部使用
Stateful Inspection Firewall: 基于连接状态的检测,将通信双方之间交互的属于同一连接的所有报文都作为整个数据流来对待。防火墙会维护一个table去记录已经建立的TCP连接,对于已经建立TCP连接的分组会直接进行转发。
而对于尚未建立TCP连接的分组(例如该连接处于第二次握手阶段),会为他创建一个新的条目,但是会通过一些规则去限制或拒绝该条连接发送的分组。同时防火墙只允许已经建立连接的请求访问高编号端口。
Application-Level Gateway应用层面
Application-Level Gateway充当通过Internet通信的内部和外部系统之间的中间设备。它通过转发来自原始客户端的请求并将其掩盖为自己的网络来保护网络,所以该网关也叫Application proxy。当客户端发送访问网页的请求时,proxy与该消息相交。proxy将消息转发到Web服务器。这样做可以隐藏客户端的标识和地理位置,从而保护其不受任何限制和潜在的攻击。然后,Web服务器做出响应,并将请求的信息提供给代理,该信息将传递给客户端。
Circuit-Level Gateway传输层面
Sets up two TCP connections, one between itself and a TCP user on an inner host and one on an outside host
Relays TCP segments from one connection to the other without examining contents
电路层代理防火墙仅监视两个主机建立连接时的握手信息,例如 Syn、Ack 和序列数据等是否合乎逻辑。虽然在电路层代理防火墙中,数据包也是被提交应用层处理的,但它只负责传递数据,而不进行数据过滤。因而不能削弱应用层攻击的威胁。
IPSIntrusion Prevention Systems:•也称为入侵检测和预防系统(IDPS)•是IDS的扩展,包括尝试阻止或防止检测到的恶意活动的能力•可以是基于主机的、基于网络的或分布式/混合的•可以使用异常检测来识别非合法用户的行为,或签名/启发式检测,以识别已知的恶意行为。•可以像防火墙一样阻止流量,但可以使用为IDS开发的算法类型来确定何时这样做
上面那个红色是坏蛋填写的表单value,下面那个是拼接后完整的SQL,其会得到所有苏州的邮寄地址然后删表,
其中,–用于注释掉在这后面的代码(图中例子是最后那个 ‘ )以防发生sql语法错误
Inband Attacks
Uses the same communication channel for injecting SQL code and retrieving results,检索到的数据直接显示在应用程序网页中
有三种类型:
Inference Attack
通过合法访问一些non-sensitive data去推断sensitive information,因为是non-sensitive data所以可以过access control
分表查询后,如果黑客知道这两种表是同一张表的索引结果,那么索引的顺序是对应的上的,则这两张表可以拼成一张表去获取每个职员的薪资。
预防Inference:
•数据库设计过程中的推理检测•该方法通过改变数据库结构或改变访问控制制度来消除推理通道,以防止推理•此类技术通常会导致不必要的更严格的访问控制,从而降低可用性
•查询时的推理检测?该方法试图消除推理通道在一个查询或一系列查询中违反的情况•如果检测到推理通道,则该查询被拒绝或修正查询
DBMS的管理策略:
Centralized administration:只有少量privileged users可以授予和回收表的访问权
Ownership-based administration:表的所有者可以授予和回收表的访问权。
Decentralized administration:不仅允许表的所有者授予和回收表的访问权,被授予访问权的用户仍可将权力授予他人。
撤销权限:
Database Encryption
加密成为数据库安全的最后一道防线 可应用于整个数据库、记录级别、属性级别或单个字段的级别
数据的机密性直接解决方案----加密全部数据,为了能够直接对加密的数据库进行处理,引入下面这种方法,涉及四种实体:
数据所有者:产生数据
用户:对系统提出请求的人
客户端:把用户的原始查询进行加密,或者对服务器返回的结果进行解密
服务端:接收来自数据所有者的加密数据并分发给客户的组织。
客户端按照下面顺序从数据库中检索记录:
用户发布一条SQL查询,请求具有特定主键的一条或多条记录。客户端的查询处理器加密主键,相应的修改SQL查询,并把查询传递给服务器,服务端处理主键被加密的查询,返回查询的结果。查询处理器解密数据并返回结果给用户。
缺点:缺乏灵活性,无法处理小于或大于某值的查询,因为加密后数据的顺序是乱的。
为了提供更好的灵活性-使用新的方法:将数据库中表的每条(行)记录按块加密
可将每行Ri看作一个连续的块Bi=(xi1||xi2…||xiM)。这样Ri中的每个属性值不管是文本类型还是数值类型都被看作比特序列,该行的所有属性值连接起来形成一个二进制块。将整行加密(块加密),表示为 E(k, Bi) = E (k, (xi1||xi2…||xiM))。为了支持数据检索,每个表都与属性索引关联。对部分属性或全部属性,创建索引值。
假设职工ID (eid )的取值范围为[ I, 1000 )。我们将这些值划分为 个分块:[ I, 200 )、[201, 400 )、[401, 600 )、[601, 800 )和[ 801, 1000 ),然后分别指派索引值1,2,3,4和5 。对于文本字段,可以从属性值的首字母得出索引。例如,对于属性ename ,可以规定以A或B开头的值的索引为1 ,以C或D开头的值的索引为2 ,以此类推。
第一列中的值表示每行的加密值,其实际值依赖于块加密算法和加密密钥。其余列给出相应属性值的索引值。真实属性值与上述索引值之间的映射函数,存储在客户端和数据所有者处,而不存储在服务器端。
例如,假设一个用户请求eid < 300 的所有职工的记录,查询处理器请求所有 (eid )<=2的记录,服务器返回这些记录。查询处理器解密返回的所有行,丢弃不匹配原始查询的记录(即大于300小于400的记录),将被请求的未加密数据返回给用户。