Buffer Overflow

概况

冯诺伊曼架构:存储器用于程序和数据。

更安全的是Harvard架构,程序和数据使用物理上独立的存储器。

缓冲区溢出是一种异常现象,指当向缓冲区中写入数据使其超过容量溢出时,会导致邻近的存储器位置被覆盖。

如果攻击者已知可执行代码的确切位置,可以用较大的输入覆盖这些位置,并把自己的可执行代码作为负载。

缓冲区溢出攻击类型:

  • Stack-overflow: 语言相关,C 和 C++ 是两种脆弱性较高的热门语言,因为它们不包含内置的保护措施以防止访问或覆盖内存中的数据。Java、PERL 和 C# 等更现代的语言具有内置特性,可帮助减少缓冲区溢出的机会,但不能完全阻止缓冲区溢出。
  • Heap-overflow
  • Off-by-one
  • Integer-overflow
  • Format string attack
  • Unicode-overflow

攻击原理

内存的划分

Linux运行时内存镜像:

  • .text:代码
  • .data:初始化的全局/静态变量
  • .bss:未初始化的全局/静态变量
  • 堆:数据的动态存储(由malloc创建)
  • 栈:局部变量,函数参数,返回地址;大小是动态的,向低地址方向延伸
  • 环境变量:可写
  • (Kernel memory?)

继续阅读“Buffer Overflow”

XMPP

即时消息

即时消息(Instant Messaging, IM),近实时通信。

与常规聊天系统相比,IM高度个人化,与在线服务结合来支持在线状态信息的显示。

在线服务(Presence Service):存储、寻找和分发参与者实例的在线信息

即时消息服务

即时消息服务基于即时消息协议(IM Protocol)与以下两个实体交互:

  • 发送者(sender):发送即时消息到一个特定的即时收件箱地址。
  • 即时收件箱(instant inbox):总与一个即时收件箱地址相关联,接收并在需要时临时存储即时消息。(如果用户在线可以直接通知)

在线服务

在线服务基于在线协议(Presence Protocol)与以下两个实体交互:

  • 在线状态实体(presentity):向在线服务提供某实体的在线信息
  • 观察者(watcher):接受在线信息
    • fetcher:随机时间或以一定时间间隔(poller)向服务器显式请求在线信息
    • subscriber:当在线状态实体的在线信息发生改变时,服务器自动向subscriber推送通知

继续阅读“XMPP”

去中心化社交网络Fediverse及其协议

IWA课程自学部分的Presentation,选择了Fediverse作为话题,本文介绍目前使用最广泛的协议ActivityPub的基础。

Overview

Fediverse is a giant Network of social media platforms for microblogging, blogging, photoblogging, videohosting and so on. All the platforms are interconnected. People only need one account on one of these platforms to access all the content and interact with all the users in the Fediverse.

History

  • 2008: The first social network of Fediverse called identi.ca was founded by Evan Prodromou. It was an instance of GNU social (previously known as StatusNet), implementing OStatus standard. At that time, there were only few other instances.
  • 2013: Identi.ca switched to pump.io.
  • Between 2010 and 2016, many other instances of GNU social were created. At that time, other projects like Friendica, Hubzilla, Mastodon and Pleroma using OStatus appear.
  • 2018: W3C presented ActivityPub protocol based on pump.io.
  • 2019: Mastodon removed support for OStatus in v3.0.0.
  • 2020: Pleroma also dropped support for OStatus in v2.0.0. According to issue #1145, by that time, 99% of traffic is ActivityPub.

继续阅读“去中心化社交网络Fediverse及其协议”

渗透测试简介

目标

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

合法性

  • 法律保障:需要书面形式的委托书,在哪一时间段对哪个目标执行哪些测试,明确测试范围和过程等。
  • 定义好的范围(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.

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