从监控异常发现网络安全
前言
最近在前端异常监控系统中,发现一些异常信息,从中做了一些分析,得到一些体会,因此作文。
发现异常
某天早上打开监控系统发现,当天凌晨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 中,内嵌一些 h5,h5 的参数中需要带上一些识别身份的 token。 如果说、我们没有使用 https,黑客在中间层监听了我们的请求,就能获取到我们的数据,甚至对方万一得到了 token,还能获取更多我们的隐私信息。 这就给重放攻击提供了安全漏洞。
那么防御重放攻击,有什么办法呢? 常用的办法有两种
(1)加随机数保障只被使用一次,但是需要额外空间存储历史使用过的值;
(2)加时间戳,不用额外保存信息,但是需要同步时间,但同步时间并不能达到各种情况下的准确。 总之大概方向就是需要一个参数,来判断是否失效。
为什么 https 保障安全
网上文章很多,这里就不做一一解释了,简单说两点,https 利用非对称加密和对称加密、保障数据安全;利用数字证书做双向身份校验、保障不被钓鱼。
抓包工具为什么能抓取 https
以前知道抓包工具通过一定配置就能抓取到 https 请求,这样一想,那 https 是不是就不安全啊,抓包工具都能拦截到。 首先我们需要先了解它的原理,才能做下一步分析。
抓包工具抓取 https 的原理是利用抓包工具做中间代理人,和客户端建立信任连接以后,再代客户端去向服务端发送和接受请求,达到中间商的效果,这样抓包工具既能看到数据,客户端也能正常使用。
以下是抓包工具抓取 https 的流程(拷贝的他人的总结,也不知道最初是谁写的,因为网上太多同样的了,作者勿怪,无法署名)
-
客户端向服务器发起HTTPS请求
-
Charles拦截客户端的请求,伪装成客户端向服务器进行请求
-
服务器向“客户端”(实际上是Charles)返回服务器的CA证书
-
Charles拦截服务器的响应,获取服务器证书公钥,然后自己制作一张证书,将服务器证书替换后发送给客户端。(这一步,Charles拿到了服务器证书的公钥)
-
客户端接收到“服务器”(实际上是Charles)的证书后,生成一个对称密钥,用Charles的公钥加密,发送给“服务器”(Charles)
-
Charles拦截客户端的响应,用自己的私钥解密对称密钥,然后用服务器证书公钥加密,发送给服务器。(这一步,Charles拿到了对称密钥)
-
服务器用自己的私钥解密对称密钥,向“客户端”(Charles)发送响应
-
Charles拦截服务器的响应,替换成自己的证书后发送给客户端
-
至此,连接建立,Charles拿到了 服务器证书的公钥 和 客户端与服务器协商的对称密钥,之后就可以解密或者修改加密的报文了
所以前提是客户端需要选择信任并安装 Charles 的证书,否则抓包工具也无法拦截 https,在互联网上大部分恶意脚本程序,想要抓取用户数据,也大都是和抓包工具一样的工作原理,所以 https 还是比较安全的。
未使用 https ?
记得以前公司还没使用 https 的时候,可能大家都经历过恶心的流量劫持,我们自己在线上环境使用都挺正常的,时不时其他地区的同事会告诉我们说,页面上漂浮了一个按钮,点开就跑到其他地方去了。 甚至说有些注入的代码有问题,导致我们的界面也出现了问题,当时各种研究后,最后的办法就是上 https, 到现在就再也不用担心这个问题了。 现在一些浏览器访问非 https 的页面,都会提示不安全,平时也看得到一些他人的网站都还是没用 https,进去就会报警告。 也如我们发现的重放攻击,这些安全问题确实存在于网络中,甚至无人能避免,所以没用 https 的站点,还是快点升级吧!
相关文章:

从监控异常发现网络安全
前言 最近在前端异常监控系统中,发现一些异常信息,从中做了一些分析,得到一些体会,因此作文。 发现异常 某天早上打开监控系统发现,当天凌晨1点过测试环境有2个前端上报的异常,报错的原因都是由于没有获取…...

Qt之自定义标题栏拓展(十)
Qt开发 系列文章 - user-defined-titlebars(十) 目录 前言 一、方式一 1.效果演示 2.创建标题栏类 3.可视化UI设计 4.定义相关函数 5.使用标题栏类 二、方式二 1.效果演示 2.创建标题栏类 3.定义相关函数 1.初始化函数 2.功能函数 3.窗口关…...

Verilog中initial的用法
在 Verilog 语言中,initial 语句用于在仿真开始时执行一次性初始化操作。它是顺序执行的,用来描述在仿真启动时立即运行的代码块,通常用于赋初值、生成波形或控制信号行为。 语法 initial begin // 语句1 // 语句2 ... end特点 只…...

(14)D-FINE网络,爆锤yolo系列
yolo过时了?传统的yolo算法在小目标检测方面总是不行,最新算法DEIM爆锤yolo,已经替yolo解决。 一、创新点 这个算法名为DEIM,全称是DETR with Improved Matching for Fast Convergence,其主要创新点在于提出了一…...

Python :冬至快乐
第1部分:基础设置 首先创建一个新的 Python 文件,命名为 fireworks.py。 步骤 1.1: 导入必要的库 import pygame import random import sys from pygame.locals import * import math import time这些库的作用: pygame: 用于创建游戏和图…...

重拾设计模式--状态模式
文章目录 状态模式(State Pattern)概述状态模式UML图作用:状态模式的结构环境(Context)类:抽象状态(State)类:具体状态(Concrete State)类&#x…...
稀疏矩阵的存储与计算 gaxpy
1, gaxpy 数学公式 其中: , , 2, 具体实例 3,用稠密矩阵的方法 本节将用于验证第4节中的稀疏计算的结果 hello_gaxpy_dense.cpp #include <stdio.h> #include <stdlib.h>struct Matrix_SP {float* val; //…...

基于LabVIEW的USRP信道测量开发
随着无线通信技术的不断发展,基于软件无线电的设备(如USRP)在信道测量、无线通信测试等领域扮演着重要角色。通过LabVIEW与USRP的结合,开发者可以实现信号生成、接收及信道估计等功能。尽管LabVIEW提供了丰富的信号处理工具和图形…...

基于LSTM长短期记忆神经网络的多分类预测【MATLAB】
在深度学习中,长短期记忆网络(LSTM, Long Short-Term Memory)是一种强大的循环神经网络(RNN)变体,专门为解决序列数据中的长距离依赖问题而设计。LSTM因其强大的记忆能力,广泛应用于自然语言处理…...

物联网:全面概述、架构、应用、仿真工具、挑战和未来方向
中文论文标题:物联网:全面概述、架构、应用、仿真工具、挑战和未来方向 英文论文标题:Internet of Things: a comprehensive overview, architectures, applications, simulation tools, challenges and future directions 作者信息&#x…...

volatility2工具的使用vol2工具篇
vol2工具 命令格式:vol.py -f [image] --profile[profile] [plugin] 1、查看系统的操作版本,系统镜像信息 2.查看用户名密码信息,当前操作系统中的password hash,例如SAM文件内容 3.从注册表提取LSA密钥信息(已解密&…...

R 基础运算
R 基础运算 R 是一种广泛使用的统计编程语言,它提供了强大的数据操作和分析功能。基础运算在 R 中非常重要,因为它们是进行更复杂计算和数据分析的基础。本文将详细介绍 R 中的基础运算,包括算术运算、逻辑运算、向量化和矩阵运算。 一、算…...

javaScriptBOM
1.1、BOM概述 1.1.1、BOM简介 BOM(browser Object)即浏览器对象模型,它提供了独立于内容而与浏览器窗口进行交互的对象,其核心对象是window。 BOM由一系列的对象构成,并且每个对象都提供了很多方法与属性 BOM缺乏标准…...

Godot RPG 游戏开发指南
Godot RPG 游戏开发指南 一、基础准备 1. 开发环境 下载并安装最新版 Godot 4.x选择使用 GDScript 或 C# 作为开发语言准备基础美术资源(角色、地图、道具等) 2. 项目结构 project/ ├── scenes/ # 场景文件 ├── scripts/ # 脚…...

目标检测数据集图片及标签同步旋转角度
前言 在深度学习领域,尤其是目标检测任务中,数据集的质量直接影响模型的性能。为了提升模型的鲁棒性和对各种场景的适应能力,数据增强技术被广泛应用于图像数据集处理。旋转角度是常见的数据增强方法,通过对图像及其对应的标签&am…...

2025前端面试热门题目——计算机网络篇
计算机网络篇——面试 1. 到底什么是 TCP 连接? TCP 连接的定义 TCP(传输控制协议)是一个面向连接的传输层协议。TCP 连接是通过 三次握手 确立的可靠数据通信链路,保证了在不可靠网络(如互联网)上的数据传输的准确…...

LEAST-TO-MOST PROMPTING ENABLES COMPLEX REASONING IN LARGE LANGUAGE MODELS---正文
题目 最少到最多的提示使大型语言模型能够进行复杂的推理 论文地址:https://arxiv.org/abs/2205.10625 摘要 思路链提示在各种自然语言推理任务中表现出色。然而,它在需要解决比提示中显示的示例更难的问题的任务上表现不佳。为了克服这种由易到难的概括…...

Java开发经验——日志治理经验
摘要 本文主要介绍了Java开发中的日志治理经验,包括系统异常日志、接口摘要日志、详细日志和业务摘要日志的定义和目的,以及错误码规范和异常处理规范。强调了日志治理的重要性和如何通过规范化错误码和日志格式来提高系统可观测性和问题排查效率。 1. …...

使用复数类在C#中轻松绘制曼德布洛集分形
示例在 C# 中绘制曼德布洛特集分形解释了如何通过迭代以下方程来绘制曼德布洛特集: 其中 Z(n) 和 C 是复数。程序迭代此方程,直到 Z(n) 的大小至少为 2 或程序执行最大迭代次数。 该示例在单独的变量中跟踪数字的实部和虚部。此示例使用Complex类来更轻松…...

VSCode 启用免费 Copilot
升级VSCode到 1.96版本,就可以使用每个月2000次免费额度了,按照工作日每天近80次免费额度,满足基本需求。前两天一直比较繁忙,今天周六有时间正好体验一下。 引导插件安装GitHub Copilot - Visual Studio Marketplace Extension f…...

常见问题整理
DevOps 和 CICD DevOps 全称Development & Operation 一种实现开发和运维一体化的协同模式,提供快速交付应用和服务的能力 用于协作:开发,部署,质量测试 整体生命周期工作内容,最终实现持续继承,持续部…...

使用Vue创建前后端分离项目的过程(前端部分)
前端使用Vue.js作为前端开发框架,使用Vue CLI3脚手架搭建项目,使用axios作为HTTP库与后端API交互,使用Vue-router实现前端路由的定义、跳转以及参数的传递等,使用vuex进行数据状态管理,后端使用Node.jsexpress…...

【Springboot知识】Redis基础-springboot集成redis相关配置
文章目录 1. 添加依赖2. 配置Redis连接3. 配置RedisTemplate(可选)4. 使用RedisTemplate或StringRedisTemplate5. 测试和验证 集群配置在application.properties中配置在application.yml中配置 主从配置1. 配置Redis服务器使用配置文件使用命令行 2. 配置…...

网络安全概论——身份认证
一、身份证明 身份证明可分为以下两大类 身份验证——“你是否是你所声称的你?”身份识别——“我是否知道你是谁?” 身份证明系统设计的三要素: 安全设备的系统强度用户的可接受性系统的成本 实现身份证明的基本途径 所知:个…...

OpenHarmony-4.HDI 框架
HDI 框架 1.HDI介绍 HDI(Hardware Device Interface,硬件设备接口)是HDF驱动框架为开发者提供的硬件规范化描述性接口,位于基础系统服务层和设备驱动层之间,是连通驱动程序和系统服务进行数据流通的桥梁,是…...

leecode494.目标和
这道题目第一眼感觉就不像是动态规划,可以看出来是回溯问题,但是暴力回溯超时,想要用动态规划得进行一点数学转换 class Solution { public:int findTargetSumWays(vector<int>& nums, int target) {int nnums.size(),bagWeight0,s…...

在Spring中application 的配置属性(详细)
application 的配置属性。 这些属性是否生效取决于对应的组件是否声明为 Spring 应用程序上下文里的 Bean (基本是自动配置 的),为一个不生效的组件设置属性是没有用的。 multipart multipart.enabled 开启上传支持(默认&a…...

jvm符号引用和直接引用
在解析阶段中,符号引用和直接引用是Java类加载和内存管理中的重要概念,它们之间存在显著的区别。以下是对这两个概念的详细解析: 一、定义与特性 符号引用(Symbolic Reference) 定义:符号引用是编译器生成的用于表示类、方法、字段等的引用方式。特性: 独立性:符号引用…...

一文流:JVM精讲(多图提醒⚠️)
一文流系列是作者苦于技术知识学了-忘了,背了-忘了的苦恼,决心把技术知识的要点一笔笔✍️出来,一图图画出来,一句句讲出来,以求刻在🧠里。 该系列文章会把核心要点提炼出来,以求掌握精髓,至于其他细节,写在文章里,留待后续回忆。 目前进度请查看: :::info https:/…...

python 分段拟合笔记
效果图: 源代码: import numpy as np import cv2 import matplotlib.pyplot as plt from numpy.polynomial.polynomial import Polynomialdef nihe(x_points,y_points,p_id):# 按照 p_id 将 points 分成两组group_0_x = []group_0_y = []group_1_x = []group_1_y = []for i, …...