0%

特殊格式

符号 代码 描述
$x^n$ x^n 上标符号
$x_1$ x_1 下标符号
$v_{\mbox{初始}}$ V_{\mbox{初始}} 汉字形式
$\displaystyle \frac{x+y}{y+z}$ \displaystyle \frac{x+y}{y+z} 字体控制
$\underline{x+y}$ \underline{x+y} 下划线符号
$\overbrace{a+b+c+d}^{2.0}$ \overbrace{a+b+c+d}^{2.0} 上大括号
$a+\underbrace{b+c}_{1.0}+d$ a+\underbrace{b+c}_{1.0}+d 下大括号
$x \stackrel{f} \rightarrow y$ x \stackrel{f} \rightarrow y 上位符号
${n+1 \choose k}={n \choose k}+{n \choose k-1}$ {n+1 \choose k}={n \choose k}+{n \choose k-1} 组合公式

算数运算

符号 代码 描述
$\pm$ \pm 加减运算
$\mp$ \mp 减甲运算
$\times$ \times 乘法运算
$\cdot$ \cdot 点乘运算
$\ast$ \ast 星乘运算
$\div$ \div 除法运算
$\frac{x+y}{y+z}$ \frac{x+y}{y+z}{x+y} \over {y+z} 分式运算
$\overline{x}$ \overline{x} 平均数运算
$\sqrt x$ \sqrt x 开根号运算
$\sqrt[n]{x+y}$ \sqrt[n]{x+y} 开方运算
$\log_2 x$ \log_2 x 对数运算
$\lim \limits_{n \to \infty}x_n$ \lim \limits_{n \to \infty}x_n 极限运算
$\sum \limits_{i=1}^n{x_i}$ \sum \limits_{i=1}^n{x_i} 求和运算
$\prod \limits_{i=1}^n{x_i}$ \prod \limits_{i=1}^n{x_i} 连乘运算
$\int_{a}^{b} e^x, dx$ \int_{a}^{b} e^x\, dx 积分运算
$\iint \limits_D, dx,dy$ \iint \limits_D\, dx\,dy 双重积分
$\oint_{L} x+y, dx,dy$ \oint_{L} x+y\, dx\,dy 闭合曲线积分
$\partial x$ \partial x 微分运算

逻辑运算

符号 代码 描述
$\geq$ \geq 大于等于
$\leq$ \leq 小于等于
$\neq$ \neq 不等于
$\ngeq$ \ngeq 不大于等于
$\not\geq$ \not\geq 不大于等于
$\nleq$ \nleq 不小于等于
$\not\leq$ \not\leq 不小于等于
$\approx$ \approx 约等于
$\equiv$ \equiv 恒定等于
$\bigodot$ \bigodot 同或
$\bigotimes$ \bigotimes 同与
$\bigoplus$ \bigoplus 异或

集合运算

符号 代码 描述
$\in$ \in 属于
$\notin$ \notin 不属于
$\subset$ \subset 子集
$\supset$ \supset 子集
$\subseteq$ \subseteq 真子集
$\subsetneq$ \subsetneq 非真子集
$\supseteq$ \supseteq 真子集
$\supsetneq$ \supsetneq 非真子集
$\not\subset$ \not\subset 非子集
$\not\supset$ \not\supset 非子集
$\cup$ \cup 并集
$\cap$ \cap 交集
$\setminus$ \setminus 差集
$\mathbb{R}$ \mathbb{R} 实数集合
$\mathbb{Z}$ \mathbb{Z} 自然数集合
$\emptyset$ \emptyset 空集

数学符号

符号 代码 描述
$\infty$ \infty 无穷
$\imath$ \imath 虚数
$\jmath$ \jmath 虚数
$\hat{a}$ \hat{a} 数学符号
$\check{a}$ \check{a} 数学符号
$\breve{a}$ \breve{a} 数学符号
$\tilde{a}$ \tilde{a} 数学符号
$\bar{a}$ \bar{a} 数学符号
$\vec{a}$ \vec{a} 矢量符号
$\acute{a}$ \acute{a} 数学符号
$\grave{a}$ \grave{a} 数学符号
$\mathring{a}$ \mathring{a} 数学符号
$\dot{a}$ \dot{a} 一阶导数符号
$\ddot{a}$ \ddot{a} 二阶导数符号
$\uparrow$ \uparrow 上箭头
$\Uparrow$ \Uparrow 上箭头
$\downarrow$ \downarrow 下箭头
$\Downarrow$ \Downarrow 下箭头
$\leftarrow$ \leftarrow 左箭头
$\Leftarrow$ \Leftarrow 左箭头
$\rightarrow$ \rightarrow 右箭头
$\Rightarrow$ \Rightarrow 右箭头
$\longrightarrow$ \longrightarrow 向右长箭头
$\Longrightarrow$ \Longrightarrow 向右长箭头
$A \xleftarrow{n=0} B \xrightarrow[T]{n>0} C$ A \xleftarrow{n=0} B \xrightarrow[T]{n>0} C 上下方可输入公式的箭头
$\triangleq$ \triangleq 定义为
$\because$ \because 因为
$\therefore$ \therefore 所以
$\forall$ \forall 任意
$\exists$ \exists 存在
$\ldots$ \ldots 底端对齐的省略号
$\cdots$ \cdots 中线对齐的省略号
$\vdots$ \vdots 竖直对齐的省略号
$\ddots$ \ddots 斜对齐的省略号
阅读全文 »

前言

本文翻译并总结归纳自 Hands-On Machine Learning for Cybersecurity 书中的 Chapter 1: Basics of Machine Learning in Cybersecurity。该书主要着眼于机器学习在网络安全领域中的应用,介绍了多个方向的原理和解决方案,比如:包时间序列分析、垃圾邮件检测、使用 k-means 算法的网络异常检测等。总的来说,该书的动手操作很多,实战性很强。接下来我会用一个系列,整理归纳书中的各个章节。当然,除了第一章是介绍机器学习的概览之外,其他几个章节内容比较离散,所以顺序可能打乱。

背景

自诞生以来,机器学习(Machine Learning)一直是一个非常热门的话题,它的出现实实在在地解决了很多问题,比如人脸识别、自动驾驶、购物推荐系统、聊天机器人等。

而在安全领域方面,老式的威胁检测系统通过使用启发式的和静态的签名(signature)来检测威胁和异常。例如:杀毒软件会根据病毒程序的特征,生成并维持一个病毒的签名库(保持持续更新),在查杀时通过与库中的签名比对来识别病毒程序。基于签名的威胁检测技术虽然容易理解,但并不健壮,它的最大的问题之一是:在数据规模、数据流速显著增大时,如何保证签名比对过程与数据流入速度匹配。每个包需要与数据库中的每个签名比对,如果不能保持同步,那意味着只能抛弃部分数据包,由此就会产生“漏网之鱼”。

如今,基于签名的系统逐渐被智能网络安全代理(Intelligent cybersecurity agent)所取代。机器学习在识别新型恶意软件、零日漏洞攻击(zero-day attack)、高级可持续威胁(advanced persistent threats,简称 APT)方面取得积极进展。

一般来说,由于攻击的复杂特性,要做到完全预防是很难的,机器学习能做到在攻击的初期识别攻击并防止其扩散到整个系统。许多网络安全公司使用诸如用户行为分析(user behavior analytics)和预测分析(predictive analytics)的高级分析方法,在威胁生命周期的早期阶段识别 APT 攻击,这种方式能够有效预防身份数据泄漏和内部威胁。规范分析(prescriptive analytics)则更具有响应性,能够在网络攻击发生以后分析该采取什么响应措施能将损失降到最小。

48e9cf0bd45e3630c4346d142839c8a1.png

机器学习中的数据

数据是机器学习的核心。数据分为结构化数据和非结构化数据,结构化数据(structured data)可以被映射为二维表结构,包含表头(Header)和表内元素,传统的关系型数据库(RDBMS)如 MySQL、Oracle 等都是以这种方式存放结构化数据;而非结构化数据(unstructured data)数据结构不规则或不完整,没有预定义的数据模型,例如图片、音频/视频等;融合了结构化和非结构化的数据称为半结构化数据(semi-structured data)

阅读全文 »

时间复杂度

时间复杂度并不是表示一个程序解决问题需要花多少时间,而是当问题规模扩大后,程序需要的时间长度增长得有多快

不管数据有多大,程序处理花的时间始终是那么多的,我们就说这个程序性能很好,具有$O(1)$的时间复杂度,也称常数级复杂度;数据规模变得有多大,花的时间也跟着变得有多长,这个程序的时间复杂度就是$O(n)$,比如找n个数中的最大值;而像冒泡排序、插入排序等,数据扩大2倍,时间变慢4倍的,属于$O(n^2)$的复杂度。还有一些穷举类的算法,所需时间长度成几何阶数上涨,这就是$O(a^n)$的指数级复杂度,甚至$O(n!)$的阶乘级复杂度。

我们将复杂度量级按照数量级递增进行排序得到下图,并将其分为两类:多项式量级非多项式量级,后者的复杂度远远大于前者。

3723793cc5c810e9d5b06bc95325bf0a.jpeg

多项式级的复杂度包括$O(1),O(log(n)),O(n^a)$等,它的规模n出现在底数的位置;非多项式级只包含$O(a^n),O(n!)$两种,其复杂度计算机往往不能承受。

自然地,人们会想到一个问题:会不会所有的问题都可以找到复杂度为多项式级的算法呢?很遗憾,答案是否定的。举个例子,输出从1到n这n个数的全排列。不管你用什么方法,你的复杂度都是阶乘级,因为你总得用阶乘级的时间打印出结果来。

还有另外一个经典的问题:Hamilton回路。问题是这样的:给你一个图,问你能否找到一条经过每个顶点一次且恰好一次(不遗漏也不重复)最后回到起点的路径(满足这个条件的路径叫做Hamilton回路)。这个问题目前还没有找到多项式级的算法。事实上,这个问题就是我们后面要说的NPC问题。

由此,我们根据复杂度分级,将问题进行分类。最简单的一类问题被称为P问题,按复杂度依次递增,又有NP问题、NPC问题和NP-Hard问题。先来看看P问题的定义。

P问题

阅读全文 »

前言

该实验是我暑期前往导师实验室,与一群东南大学网安三年级的本科生所做。我的工作是帮他们搭建了实验所需运行的服务器环境,实验数据的采集、制图以及结果分析均是他们所做。由于该实验可能在我研究生阶段进行进一步的研究,所以将它摘至我的博客,文档亦摘录了本科生们所做的实验报告,特此申明。

东大网安本科组员:翟思宇、肖遥、宋昌霖、胡钺琳、赵泽瑞、赵钧陶
指导老师:肖卿俊

引言

本实验搭载高速以太网卡,通过持续的高速数据传输,达到逼近目标服务器链路的传输速率极限,以模拟 (D)Dos 攻击的效果。攻击主机系统采用 Ubuntu Server 版本,受 Linux 系统 I/O 的内核机制的影响,发包速率受到限制。本实验创新性的利用 DPDK 软件平台绕过系统内核,实现高数据吞吐率的效果。

81db04d3b1658e9c254bfbfce6dedde2.png

如上图,Linux 内核协议栈的实现决定了它内核网络协议的性能不佳,Linux 在内核收包处理时,将网卡收到的报文通过 DMA 放到内存,网卡出发中断通知系统有报文到达,系统分配 sk_buff,将报文拷贝到 sk_buff 中,交由协议栈处理,之后将其送用户态应用程序处理。

这种情况下,报文数量的增多将急剧增加资源的消耗。这包含报文产生 CPU 中断的上下文切换、为报文申请分配 sk_buff 消耗的资源、用户态程序收发包时产生系统调用和上下文切换带来的系统资源消耗。Kernel Bypass(内核旁路)技术应运而生,DPDK 正是采用的上图图由这种类 DMA 机制,直接将数据包从硬件(网卡端口)传输至用户态应用程序,以此来实现低延迟、低消耗的高吞吐网络传输。

TRex 是思科研发的一款成熟的基于 DPDK 的网络测试工具。它运行在标准的 Intel 处理芯片上,同时支持 stateful 和 stateless 两种模式,stateful 可以描述 L4~L7 层的应用场景,而 stateless 主要用于进行定制包的发包。本实验主要利用 TRex 的 DPDK 高线速发包能力,模拟对目标服务器进行 (D)Dos 打击。

7a135e990f639b406cd1cc244d4943f3.png

阅读全文 »

初赛题目

主办方提供了 black/white/test 三个 pcap 文件夹,其中 black 和 white 分别是检测出有/无恶意软件感染的客户端 IP 组,要求选手对 test 数据集进行判定。

09bda35ff290f2e34d88d50e71d98f1a.png

解题思路

该题的解题过程应分为以下三个大步骤:

  1. 特征选择(Feature Selection),选取对于区分正常/恶意流量有明显作用的 Features。
  2. 特征提取(Feature Extraction),从 pcap 文件中提取上述 Features,并转换为模型训练所需要的格式。我们选择的特征提取工具为 Zeek
  3. 模型训练(Model Training),选择合适的机器学习模型对三类 pcap 文件进行训练和预测。我们选择的 Python 机器学习库为 scikit-learn

解题步骤

合并pcap文件

主办方提供的 pcap 文件,其中 white/black 各有 1500 个 pcap,test 2000 个 pcap

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
➜  tree eta_1 
eta_1
├── black
│   ├── 192.168.10.91.pcap
│   ├── 192.168.44.25.pcap
│   ├── ...
│   └── 192.168.80.115.pcap
├── test
│   ├── 192.168.150.71.pcap
│   ├── 192.168.150.99.pcap
│   ├── ...
│   └── 192.168.210.239.pcap
└── white
├── 192.168.119.23.pcap
├── 192.168.122.37.pcap
├── ...
└── 192.168.96.180.pcap
阅读全文 »