渗透测试简介

目标

  • 找到基础设施或应用的安全漏洞,防止被利用从而造成损失
  • 评估安全性级别
  • 识别薄弱环节
  • 提出详细的带有建议的应对措施目录

合法性

  • 法律保障:需要书面形式的委托书,在哪一时间段对哪个目标执行哪些测试,明确测试范围和过程等。
  • 定义好的范围(defined scope)
  • 定义好的测试过程(defined test process)
    • 特定的测试点
    • 可复现的结果

范围定义

攻击者模型

描述可能的攻击者、他们的访问方式、权限、前提等。

确定攻击者模型:系统需要防范哪种攻击者?

  • 外部人员,无特权(最常见的攻击者类型,没有任何系统相关的密码,不知道IP对应的系统运行什么)
  • 外部人员,有特权
  • 内部人员,无特权
  • 内部人员,低权限
  • 内部人员,高权限(系统管理员)

测试计划中需要明确一个或多个角度,从而推导出测试覆盖面(test coverage)和测试深度(test depth)。

测试覆盖

确定有多少组件、哪些组件需要被测试,确定测试中被研究的测试对象,例如:

  • 单个组件(Web应用、服务器)
  • 单个接口(API、无线通信接口/Funkschnittstelle/air interface)
  • 端到端测试(从设备、API、到Web应用,检查系统中涉及到的所有组件和接口)

部分系统测试:例如构建新的组件时对不同供应商的产品进行评估。不够全面。

端到端测试:考虑系统整体。但是开销更大、更昂贵。

增量测试(delta test):适合对于经过少量更新的系统进行测试。

继续阅读“渗透测试简介”

接收方匿名性保护

Broadcast

广播是保护接收者匿名性的方法,通过广播所有参与者都能收到消息,即使发送者也不知道接收者的身份。

性能

通常广播相比点到点通信会需要更高的吞吐量。

寻址

  • 显式地址(explicit address):并不总是必要的,例如IP协议的广播地址。用于减小广播的代价,但是难以提供匿名性。

  • 隐式地址(implicit address):接收者(addressee)站的属性,用于进一步处理。

    • 不可见地址(invisible address):即使同一个地址发送两次,也没有观察者能发现,即地址的重用看起来就像使用了另一个地址。

    实现方法:发送方和接收方协商密钥(公钥或私钥),解密后如果消息有意义,则就是发给自己的。

    • 可见地址(visible address):与不可见地址相反,观察者可以发现某些信息的地址相同。

    实现方法:发送方和接受方协商一个随机数添加在明文消息里,其他人就不知道消息是发送给谁的。

一些要注意的问题:

  • 使用不可见的隐式地址,如何判断解密后的消息有意义?

    1. 加tag,使用长度足够的tag就可以抗碰撞(生日悖论)

    2. 使用哈希或消息认证码,计算

      enc(random_num, msg, hash(random_num, msg))

      enc(key, msg, MAC(key, msg))

  • 使用可见的隐式地址,随机数的生成?

    • 需要注意每个随机数只能用一次,否则会导致linkable的问题
    • 因此通信双方可以协商使用同一个seed生成随机数
  • 不可见地址的代价比可见地址高很多,因为前者涉及到对每一条消息的解密,而后者只需要对比随机数。

地址分发(address distribution):根据地址与身份的关联性公开与否,可以将地址分为公开地址(public address)私有地址(private address)

public address private address
implicit invisible address 使用公钥加密,开销非常大。但是可以用于第一次通信时双方交换对称密钥或随机数seed。 私钥加密。开销大(但是当然比公钥加密小一点)。
implicit visible address 地址可见,且地址与身份之间的关联性是公开的,会暴露信息。不应该被使用。 获得对称密钥或随机数生成seed后可以使用。使用后需要更换随机数。

不可见公开地址的最高效的实现方法就是采用公钥加密系统

不可见私有地址的实现方法是私钥加密,因为私钥只有通信双发持有(private),且通信的地址是明文经过私钥加密生成的(invisible)。

可见私有地址的实现方法就是使用同一个seed生成伪随机数,每次通信使用不同的随机数。

继续阅读“接收方匿名性保护”

隐私增强技术基础

安全与密码学II的课程主要关注隐私增强技术,这是课程第一部分,关于基础概念、保护目标和攻击者模型等的介绍。

上学期的SaC I主要介绍了安全与密码学的基础知识,包括保护目标、攻击者模型以及保护机制,根据保护目标把方法分为两类——认证和加密,介绍了不同的密码学方法和实现原理。这学期的SaC II主题为“匿名和不可观测通信(Anonymous & Unobservable Communication)”。

隐私增强技术(Privacy Enhancing Technologies, PETs)

包含两个子领域:

  • 信息抑制工具(information suppression tools):又称为不透明工具(opacity tools),关注匿名化、假名化(pseudonymization)、混淆(obfuscation)。通过移除不重要的数据,防止攻击者学习到重要的信息。
  • 透明性增强工具(transparency-enhancing tools, TETs)
    • 告知用户收集了哪些数据、收集目的等
    • 告知数据收集的影响,需要“informed consent”
    • 检查数据收集是否符合法律规范
    • 各种技术:Secure Logging, Audits, Quality Seals, Policies…

保护目标

SaC II主要学习的是隐私增强技术,隐私是我们的保护目标,但是没有明确的定义。所以我们通过保护匿名性不可观测性来实现保护隐私性。

  • 匿名性(Anonymity):确保用户在使用一个资源或服务时不会暴露他的身份,即使是通信参与者也不能发现对方的身份。
  • 不可观测性(Unobservability):确保用户在使用一个资源或服务时,他人无法观测到正在使用的资源或者服务。未参与通信者既不能观察到消息的发送也不能观察到消息的接收。

还有一个保护目标为隐藏性(Hiding),它与不可观测性的区别在于,前者强调消息的内容是隐藏的,后者强调使用资源这一事实无法被观测到。

继续阅读“隐私增强技术基础”

卤牛肉

结合了同学介绍的方法和小高姐的配方。

材料

以一斤牛肉为例,其他调料根据牛肉用量调整。

材料 重量
牛腱 500 g
香料 适量
适量
花椒 适量
生抽 96 g
料酒 适量
洋葱 四分之一个大洋葱或一个小洋葱
小米辣 适量
甜面酱 30 g
干黄酱 35 g
黄豆酱 1勺
腐乳 1块

泡水除血

牛肉放入冷水中浸泡2个小时以上除去大部分血。

腌制

卤牛肉的腌制是非常重要的,不仅能去除泡水后剩余的血腥味,还能够让酱香味浸透整块肉。最开始使用同学的配方,放了花椒料酒去腥,用盐加入味道。但是尝试了小高姐的配方之后发现用酱油是更好的选择。

  • 牛肉挤干水分放入容器,放姜丝、花椒、料酒,倒入生抽。用手挤压牛肉,使它更好地吸收味道。

  • 盖上容器的盖子或者保鲜膜,放入冰箱隔夜腌制。最好在时间过半时再揉搓一下,翻个面。例如晚饭时开始腌制,睡前翻面。

煮牛肉

  • 把牛肉和腌制的调料一起倒进锅里,加冷水没过牛肉后再多加一点,因为肉煮熟后会膨胀一些。烧开后除去浮沫。

  • 把黄豆酱、干黄酱、甜面酱挤到一个碗里,加热水搅匀,然后倒入锅中。

  • 锅中放入腐乳、卤肉香料、小米辣、姜片、洋葱(可以大块直接扔进去)。

  • 水烧开后尝一下汤的味道,适当补一些盐。注意,汤应该稍微偏咸一点,这样肉的味道可能才正好。

  • 火调至锅中的水刚刚沸腾,一定要保持这样的小火,火太大会把牛肉煮散。盖上锅盖,计时2小时。

  • 关火之后可以把肉留在锅里再浸泡一天,会更入味。

ArchLinux+KDE安装

一篇安装ArchLinux的笔记,采用KDE Plasma桌面环境。仍有一些没有解决的问题,有时间修好之后补上。

ArchLinux+KDE 安装

安装环境

联想拯救者R7000 2020

  • CPU: AMD R7-4800H
  • RAM: 16GB
  • 集成显卡:AMD Radeon
  • 独立显卡:Nvidia GTX 1650
  • NVME固态盘0:包含了Windows 10的引导和系统分区
  • NVME固态盘1:划分出150GB用于安装ArchLinux,使用单独的引导分区
  • UEFI + GPT
  • 关闭安全引导(secure boot)

准备安装映像

官方的镜像站下载最新版本的安装映像,检查签名,烧录到U盘。

烧录工具可以用:

  • UltraISO
  • Etcher
  • win32diskmanager

安装前的工作

网络

有线连接的方式可以自动联网,使用无线局域网时用iwctl配置。

更新时钟

timedatectl set-ntp true
timedatectl status

继续阅读“ArchLinux+KDE安装”

人机交互——课程总结

MCI 总结

Introduction

UCD

User-centered design means design based on users.

  • Design is based upon understanding of users, tasks and environments.
  • Users are involved throughout design and development.
  • Design is driven and refined by user-centered evaluation.
  • Design addresses the whole user experience.

4 Phases:

  1. Understand the context: Primary users; Why will they use the product; Requirements; Environment.

  2. User analysis: Granular requirements of the product; (Help the designers to) Create storyboards and set important goals.

  3. Design: Iterative process of product design and development.

  4. Evaluation: Perform usability testing to get feedback at every stage of UCD.

    (Iterate until user requirements are satisfied.)

Usability

3 Criterion:

  • Effectiveness: the usability and completeness with which users achieve certain goals. (over-covering with the task with as few negative consequences as possible)
  • Efficiency: the resource used in relation to the result achieved. (time, physical and mental effort, money)
  • Satisfaction: perception and reaction of a person resulting from the use of a system of a product or service. (emotions, ideas, presferences, comfort)

继续阅读“人机交互——课程总结”

设计模式与框架——课程总结

DPF课程的考前总结,备份一下,图片后面补充。

Behavioral Variability Patterns

  • Template Method: Define the skeleton of algorithm in template method and redefine some primitive operations in subclasses (without changing the structure of the algorithm). In Template Method pattern, template and hook are implemented with the same class but different methods. (Role Model的视角看,Caller和Callee是equivalence关系。)
  • Objectifier: Hook method can be split out of the class and put into a seperate object.
  • Template Class: Combine Template Method and Objectifier. Hook objects can be exchanged at run time to exchange a set of methods.
  • Strategy: Talks about the exchange of algorithm.
  • Generic Template Class: Use static generic expansion to realize template class, which provides more type safety and less runtime dispatch.
  • Dimensional Class Hierarchy: Vary the template class in a class hierarchy. Concrete template classes can change the template algorithm.
  • Bridge: A variant of DCH with different incentive. The intention is to seperate the abstraction and implementation so that they can vary independently.
  • Visitor: Also a variant of DCH. One can define a new operation without changing the classes of the elements on which it operates. Visitor is used when many distinct and unrelated operations need to be performed on objects in an object structure, where the objects rarely change.
  • Facet Classification: Seperate concerns into different facets. These facets are orthogonal dimensions of the model.
  • Layered Objects: If dimensions in a Bridge have dependencies, then a contract is needed between dimensions. Layered objects shows the dimension dependencies. Upper layers depend on information of lower layers.

继续阅读“设计模式与框架——课程总结”

分区容忍系统

动机

应用需要存储持久的信息,可用性取决于数据的可用性

共识的复杂度

需要共识来保证数据的一致性

冗余的代价随着节点数的增加而增加:

  • 当所有节点都参与时,共识算法的消息数量与节点数呈线性增加
  • 平方的复杂度\rArr可扩展性差

因此只使用一部分节点参与共识,例如每个集群5台机器(Chubby)。

故障恢复也需要使用共识来决定哪些机器在运行或宕机,每个故障都需要运行共识算法,因此也与节点数成比例增加(线性)。当故障频率不高的时候开销不大。

故障

  • 硬件、软件
  • 机架、网络交换机、电源
  • 运行较慢的计算机和网络
  • 数据中心

大型系统中总会有一部分磁盘、计算机或交换器出现故障,因此需要考虑故障的发生。

可扩展性(Scalability)

通常意义上,可扩展性指通过增加资源来提高性能(吞吐量、延迟或两者同时):

  • 更多的工作单元(水平扩展):关注每秒处理的请求数量
  • 更大的工作单元(垂直扩展):关注解决更大的问题(高性能计算)

但是有时可扩展性也指,通过增加资源来提高冗余度,同时不降低性能

  • 提高持久性(durability)
  • 提高可用性(availability)

异构系统(heterogenous systems)中,新增加的机器能力比初始的机器更强,可扩展性需要解决这个问题。

系统规模越大,每台机器需要的运行系统的人员就越少(economy of scale)。

继续阅读“分区容忍系统”

基于模二次剩余的对称与非对称加密算法

首先介绍有关模二次剩余的相关数论基础。然后介绍了BBS伪随机数发生器的构造以及使用BBS PRNG的对称机密系统。此外介绍因数分解假设以外的另一种假设——二次剩余假设在公钥密码系统的应用,即Rabin算法。

二次剩余的数论基础

二次剩余的定义

QR_n \coloneqq {x \in Z_n^* \ | \ \exists y \in Z_n^*: y^2 \equiv x \ \ mod \ n}

给定模n乘法群,如果对于x \in Z_n^*,存在群元素y满足y^2 = x,则x是一个二次剩余,此时y是x的一个根。QR_n是模n二次剩余的集合。

一个元素不是二次剩余就是二次非剩余,集合记作QNR_n

QR_n乘法群

对于QR_n的元素x_1x_2有以下性质:

  • x_1 \cdot x_2 \in QR_n

    两个群元相乘结果仍在群中

  • x_1^{-1} \in QR_n

    存在逆元

素数模二次剩余Z_p^*

当p>2且为素数时,Z_p^*中每个二次剩余都有两个平方根。因此平方取模的函数具有“二对一”的映射关系,这意味着Z_p*中恰好有一半的元素为二次剩余,也即|QR_p| = \frac{p-1}{2}

讲义上给出的是Z_p域,有小于等于2个根。

x \not\equiv 0, p \ne 2时,有0或2个根。

Jacobi符号

设p>2且为素数,x \in Z_p^*,Jacobi符号定义为:

\Bigl(\frac{x}{p}\Bigr) \coloneqq \begin{cases}
    1 &\text{if } x \in QR_p\\
    -1 &\text{else}
\end{cases}

实际上还有一个符号称为Legendre符号,要求模数必须为奇素数。而Jacobi符号的模数可以是任何正整数。所以Jacobi符号是Legendre符号的推广,当模数为奇素数时,Jacobi符号等于Legendre符号。

欧拉准则 Euler Criterion(模p二次剩余的判断)

\Bigl(\frac{x}{p}\Bigr) \equiv x^{\frac{p-1}{2}} mod p

欧拉准则用于判断x是否是素数p的二次剩余

继续阅读“基于模二次剩余的对称与非对称加密算法”

Basics of Cryptology 密码学基础

本文介绍密码学基础,对称及非对称算法用于加解密或身份认证、密钥生成和密钥分发问题。

保护目标

密码学可实现的保护目标:

  • 机密性,称为隐蔽(concealment)
  • 完整性,称为身份认证(authentication)

密码学无法实现的保护目标:

  • 可用性

Kerckhoff原则

加密方法一定不能是保密的,且一定要很容易被敌人获取到。

The cipher method must not be required to be secret, and it must be able to fall into the hands of the enemy without inconvenience.

因此:

  • 只能使用公开的、经过良好分析的算法和协议
  • 不要相信“超级安全”但保密的算法
  • 不要试图设计自己的算法(除非你是密码学专家)
  • 结合不同的安全模块并不一定会得到一个完全安全的系统,因此在组合时需要谨慎

    Combining secure building blocks does not neccessarily lead to a secure overall system.

继续阅读“Basics of Cryptology 密码学基础”