1.安全世界观
继前一篇文章:我用一个小的开放式设计问题杀死了40%的面试考生。谈完Web安全,很多朋友也在关注这个话题。今天我专门再写一篇。
“安全世界观”一词是《白帽子谈网络安全》一书的开篇章节,多年后读经典还是受益匪浅!
如开头所说:“互联网本来就是安全的。既然有研究安全的人,互联网就不安全。”世界上没有坚不可摧的体系,只有没有被攻破的体系。征服的方法可能和通往罗马的道路一样多。
1.1网络安全的兴起
“破坏往往比建设容易”,但一切都不是绝对的。
对比机场安检。通过一个安全检查(过滤、净化)的过程,我们可以把未知的人或事整理出来,让他们值得信任。信任级别不同的划分区域称为信任域,两个不同信任域之间的边界称为信任边界。
数据从高级信任域流向低级信任域,无需安全检查;当数据从低级信任域流向高级信任域时,需要经过信任边界的安全检查。
安全问题的本质是信任问题。
所有安全方案设计的基础都是基于信任关系。在建立安全计划之前,我们必须相信一些东西,并有一些基本的假设。
1.2安全的三个要素
安全的三个要素是安全的基本要素,它们是:
保密性(机密性)
机密性要求数据内容不得泄露,加密是实现机密性要求的常用手段。如果文件不是存放在抽屉里,而是存放在一个透明的盒子里,虽然无法获取文件,但是文件的内容还是会泄露。
诚信(Integrity)
完整性要求保护数据内容完整且不被篡改。确保一致性的一种常见技术手段是数字签名。
可用性(可用性)
可用性要求资源是“按需”的。
比如有100个车位,有一天一个坏人搬动100块大石头把车位都占满了,停车场就不能再提供正常服务了。在安全领域,它被称为拒绝服务攻击(DoS)。拒绝服务攻击破坏了安全性的可用性。
1.3白帽兵法
默认安全策略
1)黑名单和白名单
其实安全默认原则也可以概括为白名单和黑名单的思想。如果使用更多的白名单,系统会变得更安全。
2)最低权限原则
最低原则要求系统只授予主体必要的权限,而不进行过度授权,这样可以有效降低系统、网络、应用和数据库出错的几率。
如果网站只提供Web服务,只允许打开80,443个端口,其他端口被屏蔽。
纵深防御原则
纵深防御原则包含两层含义:
1)安全方案要分层次、分方面实施,避免疏漏,不同的安全方案需要相互配合,形成一个整体;
2)在正确的地方做正确的事,即在根本问题解决的地方实施有针对性的安全计划。
数据和代码分离原则
这个原则适用于各种“注入”导致安全问题的场景。
其实缓冲区溢出也可以认为是程序违反这个原则的结果——程序在堆栈或堆中以代码的形式执行用户数据,混淆了代码和数据的边界,从而造成安全问题。
不可预测性原则
微软使用的ASLR技术在较新的Linux内核中也得到支持。在ASLR的控制下,一个程序每启动一次,其进程的栈基地址就不一样,这在一定程度上是随机的,对于攻击者来说就是“不可预测性”。
不可预测性,可以有效抵抗基于篡改和伪造的攻击。
不可预测性的实现往往需要加密算法、随机数算法和哈希算法。在设计安全方案时,充分利用这一规则往往会事半功倍。
2.通用网络安全
2.1 XSS
XSS(跨站脚本),跨站脚本攻击,只能叫XSS,因为缩写与CSS(层叠样式表)重叠。
XSS的原理是,恶意攻击者将恶意的可执行网页脚本代码插入网页。当用户浏览网页时,嵌入在网页中的脚本代码会被执行,使得攻击者能够窃取用户信息或侵犯用户的安全和隐私。XSS攻击是千变万化的,但它们仍然可以大致细分为几种类型:
非持续性的XSS也被称为反射性的XSS脆弱性。一般是把带有恶意脚本代码参数的URL发给别人。当打开URL地址时,唯一的恶意代码参数被解析并由HTML执行。
持续的XSS持续的XSS攻击不需要欺骗点击,但是黑客只需要在他们提交的地方注入表单,但是这次XSS攻击的代价还是比较高的。
一些未经验证的跳转XSS的场景是,后端需要302跳转到要跳转的传入网址参数,其中可能包含一些用户的敏感(cookie)信息。
2.2 CSRF
CSRF(跨站点请求伪造),命名为:跨站点请求伪造攻击。
那么CSRF能做什么呢?
您可以简单地理解为攻击者可以窃取您的登录信息,并以您的身份发送各种请求。攻击者只需要一点点社会工程的伎俩。
比如QQ等聊天软件发送的链接(部分伪装成短域名,用户无法区分),攻击者可以强制Web应用的用户执行攻击者预设的操作。例如,当用户登录网上银行查看自己的存款余额,在不退出的情况下点击QQ好友发送的链接,用户银行账户中的资金可能会被转移到攻击者指定的账户。
因此,当遇到CSRF攻击时,将对最终用户的数据和操作指令构成严重威胁。当被攻击的最终用户拥有管理员帐户时,CSRF攻击将危及整个网络应用程序。
CSRF原理
下图大致描述了CSRF攻击的原理:
CSRF进攻必须具备三个条件:
1.用户已登录站点a并在本地记录了cookie
2.当用户未注销站点A时(即cookie有效时),访问恶意攻击者提供的引诱危险站点B(站点B要求访问站点A)。
3.网站甲没有做任何CSRF防御
预防CSRF
CSRF的防守可以从服务器和客户端两方面入手,从服务器端防守效果更好。现在CSRF将军的防御也是在服务器上进行的。在服务器端防止CSRF攻击的方法有很多,但思路都差不多,主要从以下两个方面入手:
1.正确使用获取、发布请求和cookie
2.向非GET请求添加令牌
CSRF的防守可以根据不同的应用场景来选择。CSRF的国防工作确实会在正常业务逻辑的基础上带来很多额外的发展,但这个工作量是值得的。毕竟用户隐私和财产安全是产品最根本的。
2.3 SQL注入
SQL注入是网络开发中最常见的安全漏洞之一。攻击者可以利用此漏洞访问或修改数据,或者利用潜在的数据库漏洞进行攻击。
SQL注入的原因是该程序没有有效地转义和过滤用户的输入,这使得攻击者能够成功地向服务器提交恶意的SQL查询代码。程序接收后,错误地将攻击者的输入作为查询语句的一部分执行,导致原查询逻辑被更改,执行攻击者构造的额外恶意代码。
如何预防
防止SQL注入,主要原因是用户输入的内容不能影响正常的SQL语句的逻辑。当用户的输入信息会被用来拼接SQL语句时,我们应该始终选择不相信,任何内容都必须进行转义和过滤。当然,这还不够。以下是保卫SQL注入的一些预防措施:
严格限制Web应用程序数据库的操作权限,为该用户提供只能满足其工作的最低权限,以最大限度降低注入攻击对数据库的危害;
后端代码检查输入数据是否符合预期,并严格限制变量的类型,比如使用正则表达式进行一些匹配处理;
对于进入数据库的特殊字符('、"、\、&、*、);等等。)进行转义处理,或者编码转换;
所有查询语句都建议使用数据库提供的参数化查询接口。参数化语句使用参数,而不是将用户输入变量嵌入到SQL语句中,即不直接拼接SQL语句。
2.4分布式拒绝服务攻击
分布式拒绝服务也被称为分布式拒绝服务。
它的原理是使用大量的请求来过载资源,导致服务不可用。这种攻击不应该被视为安全问题,而是一种替代性的存在,因为这种攻击根本就是流氓行为的存在,是“伤敌一千,损己八百”的行为。
DDoS攻击可以理解为:“你开店,隔壁店不喜欢,就雇了一大堆黑社会成员坐在你店里不花钱,其他客人进不去,让你的生意很惨。”。
也许你的网站受到了DDoS的攻击,但是为什么以及如何解释这是一个意见问题。DDos攻击在层次上可分为网络层攻击和应用层攻击,在攻击技术上可分为快速流量攻击和慢速流量攻击。但是DDoS攻击的原理是资源过载,服务不可用。
主要分类
事实上,网络层的DDoS攻击本质上是无法防御的。我们能做的就是不断优化服务本身部署的网络架构,增加网络带宽。
应用层DDoS攻击不发生在网络层,而是在TCP握手成功建立后应用程序处理请求时发生。现在很多常见的DDoS攻击都是应用层攻击。
应用层的防御有时候比网络层更难,因为导致应用层受到DDoS攻击的因素很多。有时候往往是因为程序员的失误,导致一个页面加载,消耗大量资源,有时候是因为中间件配置不当。
应用层DDoS防御的核心是区分人和机器(爬虫),因为大量的请求不可能是人为的,必须由机器来构造。因此,如果我们能够有效区分人和爬行动物的行为,我们就可以很好地抵御这种攻击。
总结
网络安全对于网络从业者来说是一个非常重要的课题。本文介绍了安全的世界观和三种常见的网络安全防御知识。希望你在以后的工作中不要误踩雷,希望对你有帮助!
安全是一门简单的科学,也是一门平衡的艺术,无论是传统安全还是互联网安全,其内在原理都是一样的。我们只需要抓住安全问题的本质,不管以后遇到什么安全问题,我们都会一路走下去!
Copyright © 2017-2024 yunrg.cn All Rights Reserved. 山东云如故网络科技有限公司 版权所有 云如故 鲁ICP备19034752号