• 【网络安全】——服务端安全(注入攻击、认证与会话管理和访问控制、访问控制、加密算法与随机数、Web框架安全、应用层拒绝服务攻击DDOS等)


    这一篇博客记录的是服务端安全应用安全的知识,学习内容来自《白帽子讲Web安全》。

    ​ 承接自上一篇客户端安全之后,包括注入攻击、认证与会话管理和访问控制、访问控制、加密算法与随机数、Web框架安全、应用层拒绝服务攻击DDOS、Web Server安全等方面

    @

    注入攻击

    由于应用违背了“数据与代码分离的原则”。两个条件:1.用户能控制数据的输入;2.代码拼凑了用户输入的数据。

    SQL注入

    盲注

    ​ 在服务器没有错误回显的时候完成注入攻击。验证方法:构造简单的条件语句根据页面是否发生变化来判断SQL语句是否执行。

    Timing Attack

    ​ 利用数据库中某些特殊的函数,可以有条件地造成延迟。

    ​ 例如在MySQL中,利用BENCHMARK()函数,可以让同一个函数执行若干次,使得返回的结果比平均时间要长,通过时间长短的变化,可以判断出注入语句是否执行成功。这是一种 边信道攻击

    ​ eg:

    1170 UNION SELECT IF(SUBSTRING(current,1,1) =
    CHAR(119),BENCHMARK(5000000,ENCODE('MSG','by
    5 seconds')),null) FROM (Select Database()
    as current) as tbl;
    

    ​ 这段Payload判断库名的第一个字母是否为CHAR(119),即小写的w。如果判断结果为真,
    则会通过BENCHMARK()函数造成较长延时;如果不为真,则该语句将很快执行完。攻击者
    遍历所有字母,直到将整个数据库名全部验证完成为止。

    ​ 此外,例如如此的手段还可以获得很多有关数据库的信息。

    数据库攻击技巧

    常见的攻击机巧

    ​ SQL注入可以猜解数据库的版本。有自动化工具完成猜解username和password。。(猜解。。暴力),可以获取到当前用户的身份,从而进行进一步的文件操作,通过LOAD_FILE读出,然后INTODUMOFILE写入系统,最后通过LOAD DATA INFILE将文件导入表中。这种技巧可以导出Web-shell,为进一步攻击做好准备。

    ​ 自动化注入工具:sqlmap

    命令执行

    ​ 在MySQL中,除了直接导出Web-shell间接执行命令之外,还可以利用UDF(USER-Defined-Functions)来执行命令。若当前用户是root,则可以直接获取到root权限。

    攻击存储过程

    ​ 存储过程为数据库提供了强大的功能,但必须用CALL或者EXECUTE执行。在注入过程中,存储过后才能为攻击者提供很大便利。例如MS SQL Server中,“xp_cmd-shell”执行系统命令。

    编码问题

    ​ 注入攻击中常常用到的单引号和双引号等特殊字符。当数据集采用了“宽字符集”的时候,就会产生一些漏洞,比如几个编码代表一个字符,例如。

    ​ 0xbf27 or 1=1 经过转义之后 成为 经过转义后,会变成0xbf5c27(“”的ASCII码为0x5c),但0xbf5c又是一个字符。故原有的转义字符 就会“吃掉”。

    ​ 统一设置为UTF-8是一个很好的办法,也就是,设置页面meta标签的charset属性。

    SQL Column Truncation

    ​ MySQL数据库中,strict模式不开启会导致重复数据插入或其他非法数据插入,从而有可能获得越权访问。

    正确地防御SQL注入

    • 找到所有SQL注入漏洞

    • 修补这些漏洞

      使用预编译语句:最佳方式是使用预编译语句,绑定变量,用户的输入无法改变语句的结构和语义。

      使用存储过程:将SQL语句定义在数据库中,避免使用动态的SQL语句。

      检查数据类型使用安全函数

      从数据库角度来说,应该使用最小权限原则。

    其他注入攻击

    • XML注入:和HTML注入很相似
    • 代码注入: 通过一些执行命令的函数间接执行命令,如eval(), system()
    • CRLF注入: 两个字符 表示换行,注入换行符改变语义。eg:log日志文件的改写,注入HTTP头(Http Response Splitting),因为HTTP头是 换行的,可能导致安全隐患,可形成XSS攻击。

    文件上传漏洞

    文件上传漏洞概述

    ​ 文件上传漏洞指用户上传了一个可执行的脚本文件,并通过这个脚本文件获得了执行服务器端命令的能力。

    ​ 常见安全漏洞

    • 上传文件是Web脚本语言

    • 上传文件是Flash的策略稳健crossdo-main.xml,黑客可以控制Flash在这个域下面的行为

    • 上传文件是病毒,木马文件,诱导用户或者管理员下载执行

    • 上传文件是钓鱼图片或为包含了脚本的图片,用于钓鱼和欺诈

      形成条件:1.上传的文件能被Web容器解释执行。2.用户能从Web上访问这个文件。3.用户上传的文件并未被安全检查和格式化

      eg:开源富文本编辑器的文件上传功能。

      绕过文件上传检查功能

      1.攻击者手动修改上传过程中的POST包,添加%00字符,可以截断某些函数对文件名的判断。

      2.伪造一个合法的文件头,将真实的脚本文件放置在其后。

    功能还是漏洞

    • Apache文件解析问题: Apache对文件名的解析式从后往前解析的,直到遇到Apache认识的文件类型为止。定义在Apache的mime.types文件中。
    • IIS文件解析问题:1. ;成为截断字符,如文件名是 evil.asp;xx.jpg 时,IIS 6 会将此文件解析为 evil.asp来执行。2. 处理文件夹拓展名出错,在/*.asp/文件夹的文件都当做asp来处理
    • PHP CGI路径解析问题: PHP在Nginx作为Web Server时,一般使用fastcgi作为脚本解释器,而fastcgi模式下,PHP获取环境变量的方式有关,若解析不了,则会路径向前一步寻求环境解析。
    • 利用上传文件漏洞钓鱼: 从正常域名跳转到钓鱼网站,通过不同文件类型的解析,在域名上看上去仍然是可信任的域名,但是html文件通过*.html.jpg解析运行。

    设计安全的文件上传功能

    • 文件上传的目录设置为不可执行
    • 判断文件类型,使用白名单策略,不要使用黑名单策略
    • 使用随机数改写文件名和文件路径
    • 单独设置文件服务器的域名

    认证与会话管理

    • 认证”和“授权”的概念,单因素认证与多因素认证
    • 密码:最基础的认证手段。OWASP有推荐的最佳实践。

    OWASP:The Open Web Application Security Project (OWASP), an online community, produces freely-available articles, methodologies, documentation, tools, and technologies in the field of web application security.

    使用弱口令攻击比暴力破解有效得多。密码的保存不要明文保存,采用不可逆的加密算法或者是单项散列函数算法。

    • 多因素认证:提高攻击门槛

    • Session与认证:将Session ID加密后保存在Cookie中,Cookie收到浏览器同源策略保护,Session劫持就是Session ID在生命周期内被窃取,相当于账户失窃;如果Session ID 保存在Cookie中,则可以称作Cookie劫持。

      • Session泄漏途径:XSS攻击、网络sniff以及本地木马窃取。
    • Session Fixation攻击: 在用户登录网站的过程中,如果登录前后用户的Session ID没有发生变化,则会存在Session Fixation问题。

      • 具体攻击的过程是,用户X(攻击者)先获取到一个未经认证的SessionID,然后将这个SessionID
        交给用户Y去认证,Y完成认证后,服务器并未更新此SessionID的值(注意是未改变
        SessionID,而不是未改变Session),所以X可以直接凭借此SessionID登录进Y的账户。
    • Session保持攻击: 用户长时间未活动或者用户点击退出后,服务器将销毁session,如果Session一直未失效,则会导致Session劫持攻击。

      有的网站访问量大,则服务端不维护Session,把Session放到Cookie中加密保存,发送时带上Cookie,利用Cookie的Expire标签控制Session的失效时间,这就可以通过XSS攻击客户端Cookie失效时间来劫持Session了。

      • 定期强制销毁Cookie,一个用户可以同时拥有几个Session的问题
    • SSO 单点登录: 用户登录一次就可以访问所有系统。将风险集中了。使用最多的是OpenID,使用URL进行用户认证,同时在验证成功后重定向回网站。

    访问控制

    • What Can I Do?

      授权问题: 权限控制,访问控制。某个主体对某个客体需要实施某种操作,而系统对这种操作的限制就是权限控制。网络请求收到防火墙ACL策略的限制。加上基于页面的访问控制可以解决页面未授权访问的问题。

    • 垂直权限管理

      RBAC(Role-Based Access Control):基于角色的访问控制。采用最小权限原则。

    • 水平权限管理

      同一种用户相互间的数据不能直接访问,即问题出在同一个角色上,至今仍然是一个难题。

      eg:来伊份购物网站没有对用户进行权限控制,通过变化URL中的id参数即可查看对应id的个人
      

      姓名、地址等隐私信息。

    • OAuth简介

      不提供用户名和密码的情况下,授权第三方应用访问Web资源的安全协议。OpenID解决认证问题,OAuth解决授权问题。

      有三个角色:
      
    • User:用户

    • Resource Owner:资源提供方,用户访问其他的网页应用需要资源提供方的数据支持

    • Client:消费方,用户正在访问的网页应用

    过程步骤不赘述,理解。

    加密算法与随机数

    概述

    ​ 加密算法分为 分组加密算法流密码加密算法

    分组加密法: DES、3-DES、Blowfish、IDEA、AES等。

    流密码加密算法: RC4、ORYX、SEAL。

    ​ 根据攻击者可以获得的信息,可以分为:唯密文攻击、已知明文攻击、选择明文攻击、选择密文攻击。

    Stream Cipher Attack

    ​ 流密码常用的一种加密算法,基于异或操作,每次都只操作一个字节,但是性能非常好。

    • Reused Key Attack: 使用同一个密钥加密多次,因为基于异或操作,所以只要知道四个数据只要知道三个就可以推导出剩下的一个了。

      E(A) = A xor C
      E(B) = B xor C

      E(A) xor E(B) = A xor B;

    • Bit-flipping Attack: 在密码学中,攻击者在不知道明文的情况下,通过改变密文,使得明文按其需要的方式发生改变的攻击方式。也就是当知道A、B的明文,A的密文时,就可以推导出B 的密文。

      解决Bit-flipping攻击,验证密文的完整性。

    • 弱随机IV问题: 在authcode()函数中,它默认使用了4字节的IV(就是函数中的keyc),使得破解难度增
      大。但其实4字节的IV是很脆弱的,它不够随机,我们完全可以通过“暴力破解”的方式找到重复的IV。

    WEP破解

    ​ WEP是一种无线加密传输协议,破解了WEP的密钥,就可以连接Access Point。

    ​ 两个关键因素:

    • 初始化向量IV:明文发送,在较短时间内会出现重复,就可以利用Reused Key Attack。同时,找到相同的IV,就可以构造出相同的CRC-32校验值,可以成功实施Bit-flipping。
    • 对消息的CRC-32校验

    Security of the WEP algorithm 提出了破解WEP破解的理论。

    ECB模式的缺陷

    ​ 分组独立加密,调换任意分组的密文,那么解密后的明文也是对调位置的。所以应该使用链式加密。

    Padding Oracle Attack

    ​ 分组加密过程中,不够位数的用padding进行填充。Padding Oracle Attack的关键在于攻击者能够获知解密的结果是否符合padding。在实现和使用CBC模式的分组加密算法时,注意这一点即可。

    密钥管理

    密码学一个原则:密码系统的安全性应该依赖于密钥的复杂性,而不应该依赖于
    算法的保密性。

    ​ 防止密钥从非正常的途径泄露。不要把私钥硬编码在代码中,应该采用公私钥管理或者改善密钥管理。密钥集中管理,降低系统对密钥的耦合性,也利于定期更换密钥。

    伪随机数问题

    ​ 伪随机数不够随机。

    • 时间戳不够随机,不能直接用做随机数的生成。
    • 破解伪随机数种子即可破解,eg:PHP的rand()函数,mt_rand()函数。
    • 采用安全的随机数算法,JAVA中的用java.security.SecureRandom等。

    Web框架安全

    • MVC框架安全

      现代开发中的MVC框架。从数据流入的方向看,数据先后经过了View层、Controller层、Model层,设计安全方案的时候要掌握住数据这个关键因素。在每一层解决相关的问题,不要把不属于该层的问题留给那一层。

    模板引擎与XSS防御

    ​ 在View层解决XSS问题。在现在View层用模板引擎对页面进行渲染,模板引擎可能会提供一些编码方法

    ​ eg:Django中auto-escape采用了htmlEncode(),从而可以保证安全,有时关闭则可能导致问题。

    • Web框架与CSRF防御

      可以使用security token来解决CSRF攻击,对读写操作分开,对所有的“写操作”使用POST提交,同时,要保证security token的私密性,自动在POST中增加Token。

      1.在Session中绑定Token。
      
      2.在form表单中自动添加token字段。
      
      3.在Ajax请求中自动添加token。
      
      4.在服务端对比POST中提交的Token和Session中绑定的Token是否一致。
      
    • HTTP Headers管理

      在框架中,对HTTP头进行全局化的处理。eg:针对HTTP头的CSRF攻击。针对30X返回的HTTP Response的跳转——提供统一跳转函数(白名单)。

    • 数据持久层与SQL注入

      使用ORM框架对防止SQL注入有好处。

    应用层拒绝服务攻击DDOS

    DDOS:分布式拒绝服务 ,将正常服务放大了若干倍,通过若干个网络节点同时发起攻击,以达规模效应。

    ​ 常见的DDOS攻击:SYN flood, UDP flood, ICMP flood。

    在很多对抗DDOS的产品中,一般会综合使用各种算法,结合一些DDOS攻击的特征,对流
    

    量进行清洗。对抗DDOS的网络设备可以串联或者并联在网络出口处。

    应用层DDOS

    ​ 发生在应用层,TCP三次握手已经完成,连接已经建立,发起攻击的IP地址真实。这种攻击是对服务器性能的一种攻击,优化服务器性能的方法能够缓解这种攻击。

    • CC攻击 :对消耗资源较大的应用页面不断发起正常的请求,以达到消耗服务端资源的目的。
    • 限制请求频率: 针对每个客户端做一个请求频率的限制。

    验证码

    CAPTCHA:全自动区别计算机和人类的图灵测试。

    ​ 可能漏洞: 1. 直接利用图像相关算法识别验证码 2.验证码消耗掉后SessionID未更新,导致使用原有的SessionID可以一直重复提交同一个验证码 3. 提前将所有的验证码图片生成好,以哈希过的字符串作为验证码
    图片的文件名——采用枚举的方式即可破解。

    防御应用层DDOS

    ​ 验证码的核心是识别人与机器。一般情况下,判断HTTP头中的User-Agent字段来识别客户端。

    ​ 另外一种比较可信的办法是让客户端解析一段JS,并给出正确的运行结果,因为大部分自动化过程是直接构造HTTP包来完成的,并没有在浏览器环境中。

    ​ Web Server也可以用来进行防御。

    资源耗尽攻击

    • Slow Loris攻击:以极低的速度向服务器发送HTTP请求,由于Web Server并发的连接数都有一定的上限,故最终导致所有连接都被恶意占用。
    • HTTP POST DOS : 原理是在发送HTTP POST包时,指定一个非常大的Content-Length值,然后以很低的速
      度发包,比如10~100s发一个字节,保持住这个连接不断开。
    • Server Limit DOS:Cookie造成一种拒绝服务。Web Server对HTTP包头的大小都有长度限制,如果攻击者通过XSS攻击,恶意地往客户端写入了一个超长的Cookie,则该客户端在清空Cookie之前,将无法再访问该Cookie所在域的任何页面。

    ReDOS正则引起的问题

    ​ 当正则表达式写得不好时,就有可能被恶意输入利用,消耗大量资源,从而造成DOS。这种攻击被称为Re-DOS。这是一种代码缺陷上的漏洞。

    ​ eg: ^(a+)+$, 正常时候输入 aaaax 时,16条可能路径,但是输入 aaaaaaaaaaaaaaaaX 时,有65536条路径,极大增加正则引擎解析的速度,用户恶意构造输入的时候,有缺陷的正则表达式效率大大降低。

    PHP安全

    ​ 暂时跳过这个章节,等到具体去写POC的时候回过头来再看。

    Web Server安全

    • Apache安全:1. Apache的Module模块最容易出现安全漏洞,所以要检车Module的安装情况
      1. 指定Apache进程以单独的用户身份运行,通常需要为Apache单独建立一个user/group;使用root身份运行是一个非常不好的习惯。
      2. Apache有一些配置参数可以优化服务器的性能,提高对抗DDOS的攻击的能力。
      3. 保护好Apache log,攻击者入侵成功后,会修改清除log。
    • Nginx安全:注意软件本身的安全,配置好参数。
    • jBoss远程命令执行:JMX-Console管理后台,提供给管理员很多强大的功能,也方便了黑客入侵。远程加载war包。
    • Tomcat远程命令执行:Tomcat manager后台容易出现漏洞。

    互联网公司安全运营

    ​ 此处对互联网公司安全了解为主,此处摘录一些重要观点,不做详细探讨了。

    • 安全是产品的一个特性。
    • 好的安全方案
      • 良好的用户体验
      • 优秀的性能
  • 相关阅读:
    Centos7安装docker
    Centos 7快速安装之packstack
    mysql基础知识复习
    Linux系统部署samba服务记录
    简单python程序练习
    Docker 搭建pxc集群 + haproxy + keepalived 高可用(二)
    Docker 搭建pxc集群 + haproxy + keepalived 高可用(一)
    linux下的find文件查找命令与grep文件内容查找命令
    db2创建nickname
    oracle 启动报ORA-01105 ORA-19808
  • 原文地址:https://www.cnblogs.com/veeupup/p/12684889.html
Copyright © 2020-2023  润新知