从监控异常发现网络安全

前言

  最近在前端异常监控系统中,发现一些异常信息,从中做了一些分析,得到一些体会,因此作文。

发现异常

  某天早上打开监控系统发现,当天凌晨1点过测试环境有2个前端上报的异常,报错的原因都是由于没有获取到 url 中的参数,比如正常的地址应该是 www.xx.com?a=1&b=2, 但是实际访问的是 www.xx.com%3Fa%3D1%26b%3D2。 很明显路径被 encode 了,导致程序没有拿到参数。

  2个异常的访问路径是不一样的,并且以上2个地址  decode 之后再访问,能够正常打开页面,参数全部都是正确的。 这些访问的 url 是我们在做跳转的时候,入口配置的,我们的逻辑中不会 encode,这个地方非常让人疑惑,为什么会出现这样的请求,猜测很可能是人为修改了再访问的。 后来把参数获取出来,去查询一些信息,发现这条请求是都来自于我们的测试同学的账户,但是私下询问过,1点过同事根本什么都没有做。 也排除了有其他人用他手机访问的情况。 再对参数里的信息做查询,发现这2个参数对应的数据是在2个多月前,我们项目测试阶段的数据,这就更奇怪了,2个月前的版本我们已经没有再测试了,同事也很久没有访问过这几个入口。 是不是有人在刷我们的页面,但为什么几个参数都是如此精确,都是正确的。 

  一定有其他人在访问。因为各方面情况看起来都很不正常:

    1. 凌晨1点过访问的

    2. 访问路径被 encode 了

    3. 数据是测试同事的,他自己却没有访问过。

    4. 访问的地址的数据都是2个月前生成的,如果有三方黑客获取到了访问记录之后,延迟到最近批量访问也符合行为逻辑

  再看看上报的其他异常信息,更奇怪了,浏览器的版本无从得知,User-Agent 只有 Go-http-client/1.1 , 怎么看都像是爬虫脚本在做请求。 说到爬虫,爬虫一般会针对已知的接口进行数据拉取,以获取他人的信息; 又或者不停的遍历不同的路径,查找可访问的路由(隐藏的后门),路径遍历很容易发现,如果有日志的话,就能看到很多 404, 大量的访问一些奇怪的路径。 那我们遇到的,是前期通过某种方式拦截到我们的网页请求,收集起来,到一定时间再去访问,这种方式叫做:重放攻击

  我们在服务器又查询了 IP 等一些相关的信息,发现有几个 IP 时不时的在做这样的访问攻击,而且也看得出对方很谨慎,没有同时做大批量的请求。 又发现了更多的异常行为,首先比如一个 www.x.com/page 的页面路径,它使用 post 方法去请求了一次。 

  所有的异常数据,被访问的路径都是测试环境的地址,使用的 http,而我们的正式环境使用的 https,对方似乎并没有能力获取到 https 的请求。 通过查询这几个 IP 在正式环境访问,又发现了一条记录,而刚好这条记录的访问地址没有 https(因为有时候,我们的开发自己可能会手动把 https 改成 http 去访问。  到目前的结论是黑客方的监听是和我们的项目环境没有关系的,只是因为我们正式环境使用了 https 他才没有获取到。

  最初以为只是一个同事的手机被监听了,但是因为又出现了另一个同事的请求,所以觉得爬虫在路由器层拦截的概率更大,而且刚好这两个同事有一个用的是安卓,有一个用的是苹果,所以看起来所有的设备都有命中的可能。 但是如果是公司路由器的问题,那为什么目前为止就只发现了两个同事的访问被爬取了,这些网页其他同事也都访问过,而且频率也不低。 对方的策略具体是什么,到底在哪里拦截的,我有点束手无策了。 而后询问过另一个同事后,得知对方大概是在20多天前访问的,爬虫访问的记录全部集中在这几天。 种种迹象表明确实是前期收集了一段时间,这两天才开始出来集中访问的。

  前面通过查询 IP,发现爬虫的服务器都在国内,但是对方也可能隐藏掉了真实 IP 。 如果对方的行为对公司造成了伤害,也许可以进一步去查对方服务器归属人。 但是因为从对方访问量和攻击程序来说,对我们几乎没有伤害。 甚至能感觉到对方不是定向要攻击我们。 看起来更像是对方的程序游离在互联网上,收集到了什么,就干点什么的意思。

安全问题

  再来说说安全性问题,我们常常在访问 url 的时候,带上一些参数,比如在 app 中,内嵌一些 h5h5 的参数中需要带上一些识别身份的 token。 如果说、我们没有使用 https,黑客在中间层监听了我们的请求,就能获取到我们的数据,甚至对方万一得到了 token,还能获取更多我们的隐私信息。 这就给重放攻击提供了安全漏洞。

  那么防御重放攻击,有什么办法呢? 常用的办法有两种

  (1)加随机数保障只被使用一次,但是需要额外空间存储历史使用过的值;

  (2)加时间戳,不用额外保存信息,但是需要同步时间,但同步时间并不能达到各种情况下的准确。 总之大概方向就是需要一个参数,来判断是否失效。

为什么 https 保障安全

  网上文章很多,这里就不做一一解释了,简单说两点,https 利用非对称加密和对称加密、保障数据安全;利用数字证书做双向身份校验、保障不被钓鱼。

抓包工具为什么能抓取 https

  以前知道抓包工具通过一定配置就能抓取到 https 请求,这样一想,那 https 是不是就不安全啊,抓包工具都能拦截到。 首先我们需要先了解它的原理,才能做下一步分析。 

  抓包工具抓取 https 的原理是利用抓包工具做中间代理人,和客户端建立信任连接以后,再代客户端去向服务端发送和接受请求,达到中间商的效果,这样抓包工具既能看到数据,客户端也能正常使用。

以下是抓包工具抓取 https 的流程(拷贝的他人的总结,也不知道最初是谁写的,因为网上太多同样的了,作者勿怪,无法署名
  1. 客户端向服务器发起HTTPS请求

  2. Charles拦截客户端的请求,伪装成客户端向服务器进行请求

  3. 服务器向“客户端”(实际上是Charles)返回服务器的CA证书

  4. Charles拦截服务器的响应,获取服务器证书公钥,然后自己制作一张证书,将服务器证书替换后发送给客户端。(这一步,Charles拿到了服务器证书的公钥)

  5. 客户端接收到“服务器”(实际上是Charles)的证书后,生成一个对称密钥,用Charles的公钥加密,发送给“服务器”(Charles)

  6. Charles拦截客户端的响应,用自己的私钥解密对称密钥,然后用服务器证书公钥加密,发送给服务器。(这一步,Charles拿到了对称密钥)

  7. 服务器用自己的私钥解密对称密钥,向“客户端”(Charles)发送响应

  8. Charles拦截服务器的响应,替换成自己的证书后发送给客户端

  9. 至此,连接建立,Charles拿到了 服务器证书的公钥 和 客户端与服务器协商的对称密钥,之后就可以解密或者修改加密的报文了

  所以前提是客户端需要选择信任并安装 Charles 的证书,否则抓包工具也无法拦截 https,在互联网上大部分恶意脚本程序,想要抓取用户数据,也大都是和抓包工具一样的工作原理,所以 https 还是比较安全的。

未使用 https ?

  记得以前公司还没使用 https 的时候,可能大家都经历过恶心的流量劫持,我们自己在线上环境使用都挺正常的,时不时其他地区的同事会告诉我们说,页面上漂浮了一个按钮,点开就跑到其他地方去了。 甚至说有些注入的代码有问题,导致我们的界面也出现了问题,当时各种研究后,最后的办法就是上 https, 到现在就再也不用担心这个问题了。 现在一些浏览器访问非 https 的页面,都会提示不安全,平时也看得到一些他人的网站都还是没用 https,进去就会报警告。 也如我们发现的重放攻击,这些安全问题确实存在于网络中,甚至无人能避免,所以没用 https 的站点,还是快点升级吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/887281.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android 实现悬浮球的功能

Android 实现悬浮球的功能 在 Android 中&#xff0c;实现悬浮球可以通过以下方式实现&#xff0c;常见的方法是使用 WindowManager 创建一个悬浮窗口。以下是具体的实现步骤&#xff1a; 1. 配置权限 在 AndroidManifest.xml 中添加悬浮窗权限&#xff1a; <uses-permis…

[Python3学习笔记-基础语法] Python3 基础语法

本篇文章详细介绍Python3的基础语法&#xff0c;主要包括编码、标识符、Python保留字、注释、行缩进、多行语句、Number类型、字符串、空行、print打印等。 这些是Python最基础的东西&#xff0c;掌握好了才能更好的学习后续的内容。 有兴趣共同结伴学习Python的朋友&#xff0…

RabbitMQ3:Java客户端快速入门

欢迎来到“雪碧聊技术”CSDN博客&#xff01; 在这里&#xff0c;您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者&#xff0c;还是具有一定经验的开发者&#xff0c;相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导&#xff0c;我将…

使用JDBC操作数据库

文章目录 使用JDBC操作数据库1. JDBC访问数据库步骤2. Statement与PreparedStatement区别3. JDBC的内容4. JDBC封装4.1 为什么进行JDBC封装4.2 实现JDBC封装4.3 什么是DAO4.4 配置数据库访问参数4.5 配置数据库连接池使用之JNDI的方式 5. 单例模式5.1 懒汉模式5.2 饿汉模式 使用…

《那个让服务器“跳舞”的bug》

在程序的世界里&#xff0c;bug 就像隐藏在暗处的小怪兽&#xff0c;时不时跳出来捣乱。而在我的职业生涯中&#xff0c;有一个bug让我至今难忘&#xff0c;它不仅让项目差点夭折&#xff0c;还让我熬了无数个通宵。这个故事发生在一个风和日丽的下午&#xff0c;我们正在开发一…

Gradio学习笔记记录

安装指令&#xff1a;pip install gradio方法介绍 Interface》用于构建一些简单的页面&#xff0c;可以直接用这个指令搞定 形式》接收三个参数分别为处理函数、输入、输出三部分&#xff0c;呈现一般左/上为输入&#xff0c;右或下为输出 fn&#xff1a;将用户界面 &#xff0…

云计算-SRE-架构师-心得

云计算-SRE-架构师-心得&#xff1a; 1.目前的一个状况 今天是个周末&#xff0c;其实好像也是一直堆积了很多工作&#xff1b;好像这个就是打工人一直以来的状态&#xff1b;很多工程师都会这样的&#xff1a;今天的事情&#xff0c;明天处理吧&#xff0c;然而明天又有一堆…

shell编程(4)(5)

目录 一、在shell脚本中与用户交互 利用read name age 利用raed -p 利用read -t 10 -p 利用read -n 3 -t 10 -p 二、用脚本模拟编写 三、关系运算符 四、字符串运算符和逻辑运算符 字符串运算符 判断其是否大小写敏感 逻辑运算符之布尔运算符 余运算 声明&#xff…

✅ Qt流式布局

Qt流式布局 前段时间&#xff0c;曾经对某个软件的一个“流式布局”有点感兴趣&#xff0c;什么叫“流式布局”呢&#xff1f;请看下图: 简而言之&#xff0c;流式布局就是布局应能够根据界面尺寸的变化自动调整其内部控件的位置。然而&#xff0c;Qt 提供的标准布局&#xff…

RabbitMQ 单机与集群部署教程

目录 RabbitMQ 单机与集群部署教程第一部分:RabbitMQ 概述第二部分:RabbitMQ 单机部署教程1. 安装 RabbitMQ1.1 安装依赖项1.2 安装 RabbitMQ1.3 验证安装2. 配置 RabbitMQ2.1 配置环境变量2.2 启用 Web 管理插件2.3 创建用户与虚拟主机3. 单机案例代码实现(Python)4. 常见…

直接调用本地API(NTAPI)

文章目录 Windows操作系统中的功能调用流程直接调用NTAPI的重要性 Windows操作系统中的功能调用流程 在Windows操作系统中&#xff0c;应用程序与操作系统内核之间的交互是通过一系列精心设计的函数调用流程来实现的。让我们以一个常见的操作——创建文件为例&#xff0c;来详…

为什么我们需要DDD?DDD领域驱动设计入门及案例讲解(图文并茂+浅显易懂)

DDD领域驱动设计入门目录 Q1&#xff1a;为什么需要DDD领域驱动设计模型&#xff1f;Q2&#xff1a;DDD领域驱动设计模型怎么用&#xff1f;设计领域模型的一般步骤一、战略建模&#xff08;从高处俯瞰业务 - 微服务的宏观规划&#xff09;1. 领域划分2. 界限上下文定义3. 统一…

vue--制作购物车

&#x1f914;如何制作出下列效果呢&#xff1f;&#x1f447; &#x1f636;‍&#x1f32b;️首先: 设置css样式&#xff1a; <style>body {font-family: Arial, sans-serif;}.cart-item {width: 50%;margin-bottom: 15px;padding: 10px;border: 2px solid gray;borde…

MFC 对话框中显示CScrollView实例

有时候我们需要在对话框中显示CScrollView效果的控件&#xff0c;类似于以下效果&#xff1a; 使用实例可参考&#xff1a;MFC对话框显示CScrollView例子_哔哩哔哩_bilibili 创建CScrollView中显示的子对话框与子类&#xff1a; 两个对话框对应的类&#xff1a; CScrollView继…

数仓工具—Hive语法之窗口函数中的 case when

窗口函数中的 case when 今天我们看一下窗口函数和case when 的各种花活,最近的需求各种窗口,一个需求中十几个窗口,加上各种条件边界,所以写了大量的窗口函数和case when的组合,今天我们来看一下。 我们的数据如下 %spark.pyspark df2 = spark.createDataFrame([(&quo…

高危,Laravel参数注入漏洞安全风险通告

今日&#xff0c;亚信安全CERT监控到安全社区研究人员发布安全通告&#xff0c;披露了Laravel 参数注入漏洞(CVE-2024-52301)。在受影响的版本中&#xff0c;Application.php 文件的 detectEnvironment 函数直接使用了 $_SERVER[argv]&#xff0c;但没有检查运行环境是否为 CLI…

【unity小技巧】unity常用的编辑器扩展

文章目录 1. **自定义 Inspector&#xff08;Inspector 面板&#xff09;**示例&#xff1a; 2. **Editor Window&#xff08;自定义编辑器窗口&#xff09;**示例&#xff1a; 3. **PropertyDrawer&#xff08;自定义属性绘制&#xff09;**示例&#xff1a; 4. **菜单项&…

数字化工厂 MES试点方案全解析(二)

生产过程监控与数据采集 在生产线上部署各类传感器、数据采集终端等设备&#xff0c;与 MES 系统相连&#xff0c;实时采集生产数据&#xff0c;如设备运行参数&#xff08;温度、压力、转速等&#xff09;、产品加工数据&#xff08;尺寸、重量、加工时间等&#xff09;、物料…

Flink整合Hudi及使用

1、jar包上传 上传jar包即可完成整合 # 1、将hudi-flink1.15-bundle-0.15.0.jar包上传到flink的lib目录下 /usr/local/soft/flink-1.15.3/lib-- 如果没有启动集群&#xff0c;直接忽略 # 2、重启flink的集群 yarn application -list yarn application -kill application_170…

Flink 常用问题及常用配置(有用)

一、Flink 常用问题及常用配置 参数 示例 说明 execution.checkpointing.interval 3min Checkpoint 触发间隔 state.backend rocksdb / filesystem 用于设置statebackend类型, 默认会以内存为statebackend(无法支持大状态) taskmanager.memory.jvm-overhead.max 204…