还有兄弟不知道网络安全面试可以提前刷题吗?费时一周整理的160+网络安全面试题,金九银十,做网络安全面试里的显眼包!
王岚嵚工程师面试题(附答案),只能帮兄弟们到这儿了!如果你能答对70%,找一个安全工作,问题不大。
对于有1-3年工作经验,想要跳槽的朋友来说,也是很好的温习资料!
【完整版领取方式在文末!!】
93道网络安全面试题
内容实在太多,不一一截图了
黑客学习资源推荐
最后给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
😝朋友们如果有需要的话,可以联系领取~
1️⃣零基础入门
① 学习路线
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
② 路线对应学习视频
同时每个成长路线对应的板块都有配套的视频提供:
2️⃣视频配套工具&国内外网安书籍、文档
① 工具
② 视频
③ 书籍
资源较为敏感,未展示全面,需要的最下面获取
② 简历模板
因篇幅有限,资料较为敏感仅展示部分资料,添加上方即可获取👆
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
• 用户的所属。
– 又为生物特征,以用户的物理特征为基础,比如指纹、用户声音的形式、人脸。
口令
针对口令的攻击:密码嗅探、记录、暴力穷举破解、密码字典、肩窥(最常见的是偷看密码)、社会工程
安全的口令方式
存储安全
• 基于单向函数的口令认证
– f是单向函数,p是口令,id是身份
– Alice提供p||id
– 计算机计算f§
– 计算机与存储的值f§||id 作比较
传输安全
通过加密和动态口令实现
S/KEY认证协议
基本的S/KEY认证协议
改进的S/KEY认证协议
身份验证令牌(智能卡)
图像密码
生物特征
特点
可能会产生错误。即可能有相似生物特点的人也可以解开或者说本人因为各种原因解不开
– False Rejection Rate ( Type I Error)
– False Acceptance Rate (Type II Error)
– Crossover Error Rate:强调某个率高一点或者两者平衡
双因子认证
认证机制中包含有两个认证因子即被称作双因子认证。(常见的是结合密码以及用户手中的USB Key、动态口令牌等进一步验证身份)
USB Key认证
• 外型跟U盘相似
• 内置了CPU、存储器、芯片操作系统(COS),可以存储用户的私钥或数字证书,利用USB Key内置的密码算法实现对用户身份的认证
• 采用软硬件相结合一次一密的强双因子认证模式
• 是目前网上银行客户端安全级别最高的一种安全工具
基于USB Key身份认证系统主要的两种应用模式
• 基于挑战/应答的认证方式
• 基于PKI体系的认证方式
挑战应答
认证协议
单向认证
- 基于共享密钥
- 基于用户名和口令
- 基于公钥和证书
双向认证
- 基于共享密钥
- 基于用户名和口令
- 基于公钥和证书
可信的第三方认证(Kerberos协议)
• Kerberos是一种计算机网络认证协议,用于在非安全网络中对访问者以安全的手段进行身份认证
• Kerberos实现AAA:认证(Authentication)、授权(Authorization)、审计(Audit)。
• 运用对称密钥加密体制进行密钥管理,其扩展方法也可使用公开密钥加密方法
• 当有N个用户使用该系统时,为确保在任意两方之间进行秘密对话,系统维护与每个用户的共享密钥,所需最少会话密钥数为N个。
• 系统采用C/S结构,支持通信双方的相互认证,可以防止数据窃听、防止重放攻击、保护数据完整性
Kerberos特点
• 安全性
– 能够有效防止攻击者假冒合法用户
• 可靠性
– Kerberos服务自身可采用分布式结构,KDC之间互相备份
• 透明性
– 用户只需要提供用户名和口令,工作站代替用户实施认证的过程
• 可伸缩性
– 能够支持大量用户和服务器
Kerberos基本思想
• 用户只需输入一次身份验证信息就可凭此信息获得票据(ticket)来访问多个服务,即SSO(Single Sign On,单点登录)。
• 用户对应用服务器访问前,必须先从Kerberos认证服务器上获取到访问该应用服务器的票据。
Kerberos认证过程
重点:能够分析对Kerberos的攻击,知道如何攻击Kerberos以及如何防范这些攻击
第三章 访问控制
访问控制是主体对客体提出访问的请求后,对这一申请进行批准、允许、撤销的全过程进行的有效控制,从而确保只有符合控制策略的主体才能合法访问。
是引用监视器实现访问控制。,
访问控制的三要素
访问控制涉及到主体、客体和访问策略,三者之间关系的实现构成了不同的访问模型,访问控制模型是访问控制实现的基础。
主体
• 是指访问的发起者,一个提出访问请求或要求的实体,简记为S。有时也称为用户(User)或访问者(被授权使用计算机资源的用户代理,如进程、程序等)。
• 根据主体权限不同可以分为四类:
– 特殊的用户:系统管理员,具有最高级别的特权,可以访问任何资源,并具有任何类型的访问操作能力
– 一般的用户:最大的一类用户,他们的访问操作受到一定限制,由系统管理员分配
– 作审计的用户:负责整个安全系统范围内的安全控制与资源使用情况的审计
– 作废的用户:被系统拒绝的用户。
客体
• 是接受其他实体访问的被动实体, 也称目标,简记为O。
– 可供访问的各种软硬件资源,通常包括为文件、数据等系统需要保护的资源。
• 主客体的关系是相对的。当一个主体受到另外一个客体的访问时,这个主体也就变成了客体。
访问策略
• 是主体对客体的操作行为集和约束条件集, 简记为KS。简单讲,访问策略是主体对客体的访问规则集,这个规则集直接定义了主体对客体可以操作的行为和客体对主体的条件约束。
• 体现为一种授权行为。任何访问控制策略最终可被模型化为访问矩阵形式。
• 授权(Authorization):规定可对该资源执行的动作(例如读、写、执行或拒绝访问)。
• 未授权的访问包括:未经授权的使用、泄露、修改、销毁信息以及颁发指令等。
– 非法用户进入系统。
– 合法用户对系统资源的非法使用。
访问操作
• 具体操作如:读(R)、写(W)、实际上可读可写(修改),添加(a),删除(d),运行(e)等操作。
• O:是一种特殊的访问权–控制权(O或C,O拥有权owner、C:create) ,指某个主体具有改变其它主体对某客体的访问权限的能力。
访问控制的实现框架
访问控制的任务——
–识别和确认访问系统的用户;
–决定该用户可以对某一系统资源进行何种类型的访问。
对于可用性,访问控制通过对以下信息的有效控制来实现
- (1)谁可以颁发影响网络可用性的网络管理指令
- (2)谁能够滥用资源以达到占用资源的目的
- (3)谁能够获得可以用于拒绝服务攻击的信息
访问控制由两个重要过程组成
–通过认证来检验主体的合法身份;
–通过授权(Authorization)来限制用户对资源的访问级别(权利)。
常见访问控制形式
• 在计算机系统中,安全机制的主要内容是访问控制,包括以下3个任务:
– 授权,即确定可给予哪些主体访问客体的权力;
– 确定访问权限(读、写、执行、删除、追加等访问方式的组合);
– 实施访问权限。
• 访问控制一般都涉及自主访问控制和强制访问控制两种形式。
自主访问控制
• 最常用的一类访问控制机制,用来决定一个用户是否有权访问一些特定客体的一种访问约束机制。需要自主访问控制保护的客体的数量取决于系统环境
• 为了实现完备的自主访问控制机制,系统要将访问控制矩阵相应的信息以某种形式保存在系统中。目前在操作系统中实现的自主访问控制机制是基于矩阵的行或列表达访问控制信息。
基于行的自主访问控制机制
• 在每个主体上都附加一个该主体可访问的客体的明细表,根据表中信息的不同又可分成以下3种形式。
– 能力表(capabilities list)。能力决定用户是否可以对客体进行访问以及进行何种模式的访问(读、写、执行),拥有相应能力的主体可以按照给定的模式访问客体。
– 前缀表(profiles)。对每个主体赋予的前缀表,包括受保护客体名和主体对它的访问权限。当主体要访问某客体时,自主访问控制机制将检查主体的前缀是否具有它所请求的访问权。
– 口令(password)。在基于口令机制的自主访问控制机制中,每个客体都相应地有一个口令。主体在对客体进行访问前,必须向操作系统提供该客体的口令。如果正确,它就可以访问该客体。
基于列的自主访问控制机制
• 每个客体都附加一个可访问它的主体的明细表,它有两种形式,即保护位和访问控制表。
– 保护位(protection bits)。这种方法对所有主体、主体组以及客体的拥有者指明一个访问模式集合。保护位机制不能完备地表达访问控制矩阵,一般很少使用。
– 访问控制列表(access control list, ACL)。国际上流行的一种十分有效的自主访问控制模式
访问控制列表ACL
• 每个客体上都附加一个主体明细表,表示访问控制矩阵。表中的每一项都包括主体的身份和主体对该客体的访问权限
访问控制列表ACL的优化
• 可访问某客体的主体很多时,访问控制表将会变得很长。而在一个大系统中,客体和主体都非常多,访问控制表将占用很多CPU时间。
• 把用户按其所属或其工作性质进行分类,构成相应的组(group),并设置一个通配符(wild card)“*”,代表任何组名或主体标识符。
能力表CL和访问控制列表ACL的区别
• 鉴别方面:二者需要鉴别的实体不同
• 保存位置不同
• 浏览访问权限:ACL容易,CL困难
• 访问权限传递:ACL困难,CL容易
• 访问权限回收:ACL容易,CL困难
• ACL和CL之间转换
– ACL->CL:困难
– CL->ACL:容易
• 多数集中式操作系统使用ACL方法或类似方式
• 由于分布式系统中很难确定给定客体的潜在主体集,在现代OS中CL也得到广泛应用
自主访问控制的实现举例
拥有者/同组用户/其他用户+访问控制列表模式
访问控制表只对“拥有者/同组/其他用户”无法分组的用户才使用。
自主访问控制模型的特点
• 对用户提供的灵活的数据访问方式,应用广泛;
• 在移动过程中其访问权限关系会被改变。
• 当用户数量多、管理数据量大时,由于访问控制的粒度是单个用户,ACL会很庞大。
• 采用ACL机制管理授权处于一个较低级的层次,管理复杂、代价高以至易于出错。
• 它有一个明显的缺点,就是这种控制是自主的。虽然这种自主性为用户提供了很大的灵活性,但缺乏高安全等级所需的高安全性。
强制访问控制(MAC)
• 在强制访问控制机制下,系统中的每个进程、每个文件、每个 IPC 客体( 消息队列、信号量集合和共享存储区)都被赋予了相应的安全属性,这些安全属性是不能改变的,它由管理部门或由操作系统自动地按照严格的规则来设置,不像访问控制表那样由用户或他们的 程序直接或间接地修改。
• MAC是一种多级访问控制策略,它的主要特点是系统对访问主体和受控对象实行强制访问控制,系统事先给访问主体和受控对象分配不同的安全级别属性,在实施访问控制时,系统先对访问主体和受控对象的安全级别属性进行比较,再决定访问主体能否访问该受控对象。
安全级别
• 安全级别由两方面的内容构成。
– 保密级别(或叫做敏感级别或级别)。
– 范畴集。
• 安全级别包括一个保密级别,范畴集包含任意多个范畴。安全级别通常写作保密级别后随一范畴集的形式
• 实际上范畴集常常是空的,而且很少有几个范畴名。
• 在安全级别中保密级别是线性排列的。两个安全级别
之间的关系有以下几种。
– 第一安全级别支配第二安全级别。
– 第二安全级别支配第一安全级别。
– 第一安全级别等于第二安全级别。
– 两个安全级别无关。
安全策略
一个安全策略是对一个系统应该具有的安全性的描述。只有当一个操作系统(或一个可信系统的任意部分)与其安全策略相称,也就是说,该操作系统能够满足对它的安全要求,这个操作系统才是可信的。
军事安全策略
系统内所有信息(如文件)都具有相应的密级,每个人都拥有一个许可证。
军事安全策略的目的是防止用户取得自己不应得到的密级较高的信息。
密级、安全属性、许可证、访问类等含义是一样的,分别对应于主体或客体,一般都统称安全级别。
商业安全策略
• 四个安全等级
– Public
– Sensitive
– Private
– Confidential
Clark-Wilson商业安全策略
为了体现用户完整性,他们提出了职责隔离(seperation of duty)目标;
为了保证数据完整性,他们提出了应用相关的完整性验证进程;
为了建立过程完整性,他们定义了对于变换过程的应用相关验证;
为了约束用户、进程和数据之间的关联,他们使用了一个三元组结构
• Clark-Wilson模型的核心是以良构事务为基础来实现商务环境中所需的完整性策略。
在模型中,CDIs、UDIs、IVPs和TPs分别代表受控数据项(constrained data items)、非受控数据项 (unconstrained data items)、完整性验证过程(integrity verification procedures)和变换过程(transformation procedures)。
Clark-Wilson模型中的完整性保证是一个两段式过程:由安全官员、系统所有者和关于一个完整性策略的系统管理员来完成的认证过程,及其由系统来完成的实施过程。
完整性机制和强制访问控制的差别
• 在完整性控制中,没必要给每一个数据项都关联一个特定的完整性安全级,而仅仅是一个许可执行的程序集。
• 一个用户并没有被授权去直接读或写确定的数据项,而是通过执行程序来影响这些数据。
Bell-La Padula军事级保密性模型(BLP)
• 在BLP模型中将主体定义为能够发起行为的实体,如进程;将客体定义为被动的主体行为承担者,如数据、文件等;将主体对客体的访问分为r(只读)、w(读写)、a(只写)、x(执行)以及c(控制)五种访问模式,其中c(控制)是指该主体用来授予或撤销另 一主体对某一客体的访问权限的能力。
• BLP模型的安全策略包括两部分: 自主安全策略和强制安全策略。
• 自主安全策略使用一个访问矩阵表示,访问矩阵第i行第j列的元素Mij表示主体Si对客体Oj的所有允许的访问模式,主体只能按照在访问矩阵中被授予的对客体的访问权限对客体进行相应的访问。
• 强制安全策略包括简单安全特性和*特性,系统对所有的主体和客体都分配一个访问类属性,包括主体和客体的密级和范畴,系统通过比较主体与客体的访问类属性控制主体对客体的访问。
Biba模型
主要应用类似BLP模型的规则来保护信息的完整性
目标
主要目标是用以防止对系统数据的非授权修改,从而达到对整个系统数据完整性进行控制的目的,对于职责隔离目标,则是通过对访问类的恰当划分方案来实现的
完整性级别
• 每个完整级别均由两部分组成: 密级和范畴。其中,密级是如下分层元素集合中的一个元素: {极重要(crucial,C),非常重要(very important,VI),重要(important,I)}。此集合是全序的,即C>VI>I。范畴的定义与BLP模型类似。
• 完整级别形成服从偏序关系的格,此偏序关系称为支配(≤)关系
强制安全特性
• 简单完整性规则(simple integrity axiom),规定完整性级别高的主体不能从完整性级别低的客体读取数据。强调主体如何从客体进行读操作。——没有“下读”。
• 星级完整性规则(*-integrity axiom),规定完整性级别低的主体不能对完整性级别高的客体写数据。——禁止“上写”。
• 调用规则(invocation property),规定一个完整性级别低的主体不能从级别高的客体调用程序或服务。
优势
Biba模型的优势在于其简单性以及和BLP模型相结合的可能性
不足
• 完整标签确定的困难性。
• Biba模型在有效保护数据一致性方面不充分。
• 关于Biba模型和BLP模型的结合
第四章 软件安全
程序安全
程序问题分为非恶意程序错误或恶意代码
非恶意程序错误:缓冲区溢出
什么是缓冲区溢出? 原理?
– 向固定长度的缓冲区中写入超出其预告分配长度的内容,造成缓冲区中数据的溢出,从而覆盖了缓冲区周围的内存空间。黑客借此精心构造填充数据,导致原有流程的改变,让程序转而执行特殊的代码,最终获取控制权。
假设现在有一个程序, 它的函数调用顺序如下。
main() ->; func_1() ->; func_2() ->; func_3()
即: 主函数main调用函数func_1; 函数func_1调用函数func_2; 函数func_2调用函数func_3。
其详细结构图如下页图所示。
• 随着函数调用层数的增加,函数栈帧是一块块地向内存低地址方向延伸的。
• 随着进程中函数调用层数的减少,即各函数调用的返回,栈帧会一块块地被遗弃而向内存的高址方向回缩。
• 特点:更具有破坏性和隐蔽性
• 在缓冲区溢出中,我们主要关注数据区和堆栈区。
在使用栈时,引用栈帧需要借助的两个寄存器
• 一个是SP(ESP),即栈顶指针,它随着数据入栈出栈而发生变化。
• 另一个是BP(EBP),即基地址指针,它用于标识栈中一个相对稳定的位置,通过BP,再加上偏移地址,可以方便地引用函数参数以及局部变量。
• 在局部变量的下面,是前一个调用函数的EBP,接下来就是返回地址。
• 如果局部变量发生溢出,很有可能会覆盖掉EBP甚至RET(返回地址),这就是缓冲区溢出攻击的“奥秘”所在。
危害
• 它极容易使服务程序停止运行,服务器死机甚至删除服务器上的数据。
• 更为严重的是,可以利用缓冲区溢出执行非授权指令,甚至取得系统特权,进而进行各种非法操作。
栈溢出
例子
#include <stdio.h>
int main()
{
char name[16];
gets(name);
for(int i=0;i<16&&name[i];i++)
printf(“%c**”****, name[i]);**
}
编译上述代码,输入hello world!
结果会输出hello world!
• 在调用main()函数时,程序对栈的操作是这样的:
– 先在栈底压入返回地址
– 接着将栈指针EBP入栈,并把EBP修改为现在的ESP
– 之后ESP减16,即向上增长16个字节,用来存放name[]数组
• 现在栈的布局如图所示。
• 执行完gets(name)之后,栈中的内容如下图所示
• 如果输入的字符串长度超过16个字节,例如输入:hello world!AAAAAAAA……,则当执行完gets(name)之后,栈的情况如图所示。
• 由于输入的字符串太长,name[]数组容纳不下,只好向栈的底部方向继续写‘A’。这些‘A’覆盖了堆栈的老的元素,从上页图可以看出,EBP,Ret 都已经被‘A’覆盖了。
• 从main返回时,就必然会把‘AAAA’的ASCII码——0x41414141视作返回地址,CPU会试图执行0x41414141处的指令,结果出现难以预料的后果,这样就产生了一次堆栈溢出
栈溢出攻击步骤
栈: 由高地址向低地址增长
堆: 由低地址向高地址增长
定位返回地址位置
确定返回地址内容
• 返回地址是指shellcode的入口地址。攻击者如果希望目标程序改变其原来的执行流程,转而执行shellcode,则必须设法用shellcode的入口地址覆盖某个跳转指令。
填充数据
• 由于攻击者不能准确地判断shellcode的入口地址,因此为了提高shellcode的命中率,往往在shellcode的前面安排一定数量的填充数据。
编写shellcode
shellcode是由黑客精心构造的,而由于缓冲区溢出自身的特性,它的结构和构造类型有一定的特性。
NSR模式
• 在shellcode的后面安排一定数量的返回地址,在前面安排一定数量的填充数据,这种结构称为NSR型,或前端同步型。
• 原理是:只要全部的N和S都处于缓冲区内,并且不覆盖RET,而使R正好覆盖存放RET的栈空间,这样只要将R的值设置为指向N区中任一位置,就必然可以成功地跳转到我们预先编写的shellcode处执行。
• 这是一种经典结构,适合于溢出缓冲区较大、足够放下我们的shellcode的情况。
• 这是一种非精确定位的方法,N元素越多成功率越大,其缺点是缓冲区必须足够大,否则shellcode放不下或者N元素数量太少都会造成失败。
RNS模式
• 其原理是:只要把整个缓冲区全部用大量的返回地址填满,并且保证会覆盖存放RET的栈空间,再在后面紧接N元素和shellcode,这样就可以很容易地确定返回地址R的值,并在植入代码中进行设置。
• 这里填充的R的数目必须能够覆盖ret,R的值必须指向大量N中的任何一个。
• 这种方法对大的和小的缓冲区都有效。而且RET地址较容易计算。
AR模式
• 又称环境变量型。这种构造类型不同于NSR型和RNS型,它必须事先将shellcode放置在环境变量中,然后将shellcode的入口地址和填充数据构成植入代码进行溢出攻击。
• **这种构造类型对于大、小溢出缓冲区都适合。**但由于必须事先将shellcode放置到环境变量中,故其应用受到了限制,只能用于本地而不能用于远程攻击
Shellcode的目标:Use execve(“/bin/sh”, argv, 0) to run shell
缓冲区溢出的安全对策
- 用户方面:用更安全的函数,比如说strncpy(), strncat()等
- 操作系统方面:ASLR原则(地址空间布局随机化)
- 编译器方面:Stack-Guard
还有兄弟不知道网络安全面试可以提前刷题吗?费时一周整理的160+网络安全面试题,金九银十,做网络安全面试里的显眼包!
王岚嵚工程师面试题(附答案),只能帮兄弟们到这儿了!如果你能答对70%,找一个安全工作,问题不大。
对于有1-3年工作经验,想要跳槽的朋友来说,也是很好的温习资料!
【完整版领取方式在文末!!】
93道网络安全面试题
内容实在太多,不一一截图了
黑客学习资源推荐
最后给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
1️⃣零基础入门
① 学习路线
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
② 路线对应学习视频
同时每个成长路线对应的板块都有配套的视频提供:
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!