原创Paper | 基于快照的 fuzz 工具 wtf 的基础使用

04-30 5209阅读 0评论

日期:2023年6月21日

0x00 前言

参考资料

wtf () 是一种分布式、代码覆盖引导、可定制、基于快照的跨平台模糊器,设计用于 fuzz 在 Microsoft Windows 平台上运行的用户模式或内核模式的目标。

在日常的 fuzz 的工作中,通常我们都需要先大致分析目标软件,然后对其输入点构造 harness,才可以使用工具对 harness 进行 fuzz,从而发现目标软件的潜在漏洞。构造 harness 不是一件容易的事情,这取决于安全研究人员分析解构目标软件的程度,除此之外,在部分软件中,只有进行完整的、复杂的初始化操作和预设,才能保证 harness 调用的输入点函数能够正常运行。

针对这一问题,基于快照的 fuzz 工具 wtf 吸引了我的注意;我们可以对正常运行的目标软件打下内存快照,然后对该内存快照进行 fuzz,这种方式可以不必编写 harness,并在一定程度上减少分析目标软件的成本。

本文从基于快照这一个特性出发,介绍 wtf 工具的基础使用和注意事项。

本文实验环境:

Windows 10 x64 专业版
Visual Studio 2019
WinDBG

ProxmoxVE 7.2-3

0x01 wtf概要

参考资料

在 github 上可以访问 wtf 的源码和 README():

原创Paper | 基于快照的 fuzz 工具 wtf 的基础使用 第1张

作者提供了 4 篇使用 wtf 进行 fuzz 的实操文章:

Building a new snapshot fuzzer & fuzzing IDA()

Fuzzing Modern UDP Game Protocols With Snapshot-based Fuzzers()

Fuzzing RDPEGFX with "what the fuzz"()

A Journey to Network Protocol Fuzzing – Dissecting Microsoft IMAP Client Protocol()

其中第一篇针对 IDA 的 fuzz,也是作者开发 wtf 的初衷,其中讲诉了 wtf 的开发历程并介绍了 wtf 的实现原理。

通过以上文章,了解到使用 wtf 进行 fuzz 可以大致分为 3 个步骤:

1. 远程调试目标程序,并在合适的位置打下系统内存快照
2. 为内存快照编写 wtf 的 fuzz 模块/插件(也称为 harness)
3. 编译并启动 wtf 进行 fuzz

为了方便下文叙述,这里先介绍如何源码编译 wtf。wtf 使用 ninja 进行构建,首先我们下载 ninja() 并添加到环境变量PATH中,随后从 github 下载 wtf 源码,打开 Visual Studio 的 x64 位开发者命令行工具(vs2019:x64 Native Tools Command Prompt for VS 2019):

# 进入 wtf 的 build 目录
$ cd C:\Users\john\Desktop\wtf-0.4\src\build
# 执行 bat 脚本
$ .\build-release.bat

执行如下:

原创Paper | 基于快照的 fuzz 工具 wtf 的基础使用 第2张

编译成功后,会在build目录下生成wtf.exe文件,该二进制文件将支撑我们全部的 fuzz 流程。

0x02fuzz hevd

参考资料

wtf 提供了完整的测试用例 hevd / tlv_server,能够帮助我们快速上手 wtf,这里我们以 hevd 为例进行介绍;hevd(HackSys Extreme Vulnerable Windows Driver)是 Windows 内核驱动漏洞靶场(),以帮助安全研究员学习漏洞原理。

首先第一步是创建 hevd 运行时的系统内存快照,作者已经提供好了,下载解压后如下:

原创Paper | 基于快照的 fuzz 工具 wtf 的基础使用 第3张

第二步是编写 hevd 的 wtf fuzz 模块/插件,其插件代码属于 wtf 源码的一部分,在其中需要定义如何对快照进行初始化,如何向快照注入测试用例等操作,同样作者也提供了,如下:

原创Paper | 基于快照的 fuzz 工具 wtf 的基础使用 第4张

通过build-release.bat重新编译 wtf 以添加 hevd 插件,target-hevd已经准备好了工作目录,如下:

$ tree target-hevd
target-hevd
├── inputs 输入/测试用例/样本种子文件
├── outputs 输出/wtf发现的可产生不同的路径的测试用例
├── coverage 覆盖率文件夹
├── crashes 保存触发 crash 的测试用例
└── state 快照文件夹,包含内存dump(`mem.dmp`)和CPU状态`regs.json`

$ hexdump -C target-hevd/inputs/ioctl.bin
00000000 3b 20 22 00 |; ".|
00000004

随后便可以使用wtf.exe进行 fuzz,wtf 的 fuzz 分为 server 节点和 fuzz 节点,服务器节点负责聚合代码覆盖率、语料库,生成测试用例并将其分发给客户端,fuzz 节点运行由服务器生成和分发的测试用例,并将结果传回服务器(代码覆盖率/结果等)。

原创Paper | 基于快照的 fuzz 工具 wtf 的基础使用 第5张

$ cd C:\Users\john\Desktop\wtf-0.4\src\build
# 首先启动 server 节点
# master 指定为 server 节点
# --name 指定插件模块为 hevd
# --max_len 设置最大测试用例长度
# --runs 设置生成测试用例的个数
# --target 设置工作目录
$ .\wtf.exe master --name hevd --max_len=1028 --runs=10000000 --target C:\Users\john\Desktop\target-hevd
# 再启动一个 fuzz 节点
# fuzz 指定为 fuzz 节点
# --backend 指定执行后端为 bochscpu(还支持 whv/kvm)
$ .\wtf.exe fuzz --name hevd --backend=bochscpu --target C:\Users\john\Desktop\target-hevd

执行如下:

原创Paper | 基于快照的 fuzz 工具 wtf 的基础使用 第6张

运行一段时间后我们将收获 crash,本文这里不进行扩展分析。

0x03demo程序

参考资料

target-hevd示例能够让我们快速的上手 wtf,现在我们提供个 demo 程序以便完整的学习 wtf 的基本使用,编写 demo 程序如下:

#define _CRT_SECURE_NO_WARNINGS

#include
#include
#include

__declspec(dllexport) int fuzzme(char* data);

char* argv_0 = NULL;

int __declspec(noinline) fuzzme(char* data) {
unsigned int len = strlen(data);

if (!(len > 0 && data[0] == 't')) {
printf("Error 0\n");
return 0;
}
if (!(len > 1 && data[1] == 'e')) {
printf("Error 1\n");
return 0;
}
if (!(len > 2 && data[2] == 's')) {
printf("Error 2\n");
return 0;
}
if (!(len > 3 && data[3] == 't')) {
printf("Error 3\n");
return 0;
}

//
printf("!!!!!!!!!!OK!!!!!!!!!!\n");

char* crash = NULL;
if (len > 4 && data[4] == '1') {
crash[0] = NULL;
} else if (len > 4 && data[4] == '2') {
char buffer[5] = { 0 };
// stack-based overflow to trigger the GS cookie corruption
for (int i = 0; i < 5; ++i) {
strcat(buffer, argv_0);
}
printf("buffer: %s\n", buffer);
}
else {
printf("Error 4\n");
}

return 0;
}

int main(int argc, char* argv[]) {
char ready = 0;
char data[32] = { 0 };

argv_0 = argv[0];

printf("ready?\n");
scanf("%c", &ready);

printf("input data:\n");
scanf("s", data);
printf("%s\n", data);

fuzzme(data);

return 0;
}

在main()函数的起始位置,我们设置了一个ready标志等待用户输入一个字符后,再执行真正代码逻辑,这样可以方便我们后续调试该程序进行快照操作;随后 demo 程序接收用户输入的字符串,将该字符串传入核心函数fuzzme()进行处理,在该函数中将逐字节检查用户输入是否等于test,满足条件后若第 5 个字节为1,则手动触发空指针访问异常,若第 5 个字节为2,则手动触发 GS cookie 异常,其他则调用printf()输出。

我们将该 demo 程序编译为wtf_test.exe,接下来的目标则是使用 wtf 对该二进制程序的fuzzme()函数进行 fuzz,找到其中的两个异常错误;同样按照上文的三大步进行。

0x04 内存快照

参考资料

首先我们需要搭建双机调试环境来获取二进制运行时的内存快照,官方推荐使用 hyper-v 虚拟机作为执行环境,我这里使用 ProxmoxVE 虚拟机环境也一样;运行的虚拟机(debuggee)使用 1C4G 的配置,调试主机(debugger)的环境不做要求,需要注意一点,由于打内存快照涉及到大量的数据通信,双机调试一定要使用网络调试进行,实验环境搭建如下:

原创Paper | 基于快照的 fuzz 工具 wtf 的基础使用 第7张

在debuggee上使用命令开启 powershell 配置网络双机调试如下:

# 开启 debug
$ bcdedit /debug on
# 设置网络调试参数
# 设置 debugger 的 ip 地址为 10.0.25.191
# 设置被调试机的端口为 50000
# 设置被调试机的连接密码为 p.a.s.s
$ bcdedit /dbgsettings NET HOSTIP:10.0.25.191 PORT:50000 KEY:p.a.s.s
# 查看调试配置
$ bcdedit /dbgsettings

除此之外,我们还需要关闭 Windows 的 KVA(Kernel Virtual Address) shadow 功能,否则 wtf 执行快照时将出现内存分页错误的问题,可以使用作者提供的脚本()进行关闭:

REM To disable mitigations for CVE-2017-5715 (Spectre Variant 2) and CVE-2017-5754 (Meltdown)
REM https://support.microsoft.com/en-us/help/4072698/windows-server-speculative-execution-side-channel-vulnerabilities
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v FeatureSettingsOverride /t REG_DWORD /d 3 /f
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v FeatureSettingsOverrideMask /t REG_DWORD /d 3 /f

如果关闭 KVA shadow 后若还出现内存分页错误,可尝试使用对内存进行锁定再进行快照。

随后使用debugger使用 WinDBG 网络调试连接debuggee,随后在debuggee上执行wtf_test.exe程序,在 WinDBG 中进入目标进程空间如下:

原创Paper | 基于快照的 fuzz 工具 wtf 的基础使用 第8张

此时,我们需要选择一个「合适」的内存快照位置,因为 wtf 将会以该快照作为起始运行状态,在wtf_test.exe中,我们的目标函数是fuzzme(),所以我们在fuzzme()函数入口打下断点,并在wtf_test.exe程序中分别输入g和1234以运行到断点处,如下:

原创Paper | 基于快照的 fuzz 工具 wtf 的基础使用 第9张

随后我们使用 WinDBG 的插件 bdump ()对此刻的运行状态进行快照:

# 加载 bdump.js 脚本
kd> .scriptload C:\Users\john\Desktop\bdump\bdump.js
# 打下内存快照,保存在 state 文件夹中
kd> !bdump_active_kernel "C:\\Users\\john\\Desktop\\state"

执行如下:

原创Paper | 基于快照的 fuzz 工具 wtf 的基础使用 第10张

在本文的实验环境下,打内存快照大约需要 40 min。

0x05 编写wtf插件

参考资料

随后我们为 demo 程序编写 wtf 的插件,我们可以以作为模板进行改写。

插件主要需要实现Init()和InsertTestcase()两个函数,wtf 加载内存快照后,将停留在我们打下断点/打下快照的位置,然后首先调用一次插件的Init()函数,在该函数中一般定义了:1.快照运行到何处停止、2.如何处理异常错误、3.如何处理IO 等操作,完成初始化操作后,随后将在每次执行快照前,调用InsertTestcase()函数注入测试用例。

编写 demo 的 wtf 插件如下:

#include "backend.h"
#include "targets.h"
#include "crash_detection_umode.h"
#include

namespace Demo {

bool InsertTestcase(const uint8_t *Buffer, const size_t BufferSize) {
// "int fuzzme(char* data)" => data == Rcx
const Gva_t data = Gva_t(g_Backend->Rcx());
if (!g_Backend->VirtWriteDirty(data, Buffer, BufferSize)) {
fmt::print("VirtWriteDirty failed\n");
return false;
}

return true;
}

bool Init(const Options_t &Opts, const CpuState_t &) {
// Stop the test-case once we return back from the call [fuzzme]
const Gva_t Rsp = Gva_t(g_Backend->Rsp());
const Gva_t ReturnAddress = Gva_t(g_Backend->VirtRead8(Rsp));
if (!g_Backend->SetBreakpoint(ReturnAddress, [](Backend_t *Backend) {
fmt::print("Back from kernel!\n");
Backend->Stop(Ok_t());
})) {
fmt::print("Failed to SetBreakpoint ReturnAddress\n");
return false;
}

// setup usermode crash/exception detection hooks
if (!SetupUsermodeCrashDetectionHooks()) {
fmt::print("Failed to SetupUsermodeCrashDetectionHooks\n");
return false;
}

// patch "printf" to stdio
if (!g_Backend->SetBreakpoint("printf", [](Backend_t *Backend) {
const Gva_t StrPtr = Backend->GetArgGva(0);
const std::string &str = Backend->VirtReadString(StrPtr);
fmt::print("Demo: {}", str);
Backend->SimulateReturnFromFunction(0);
})) {
fmt::print("Failed to SetBreakpoint printf\n");
return false;
}

return true;
}

// Register the target.
Target_t Demo("demo", Init, InsertTestcase);

} // namespace Demo

需要注意的是,由于快照不具备 IO 访问能力,发生 IO 操作时 wtf 无法正确处理,所以我们应该尽量选择一个「合适」的快照点;对于无法避免的 IO 操作,我们可以采用 patch 的方式修改逻辑,如 demo 程序中的printf()函数调用,我们在Init()中进行 patch,不会执行真正的printf()功能。

原创Paper | 基于快照的 fuzz 工具 wtf 的基础使用 第11张

通过build-release.bat重新编译 wtf 以添加 demo 插件。

0x06fuzz demo

参考资料

首先我们准备好工作目录如下,其中state目录就是我们上文打下的内存快照:

$ tree workdir
workdir
├── inputs
├── outputs
├── coverage
├── crashes
└── state

$ cat workdir/inputs/1.txt
1234

在进行 fuzz 之前,我们先使用 wtf 的run子命令,检查内存快照和插件是否正确运行:

$ cd C:\Users\john\Desktop\wtf-0.4\src\build
# 指定为 run 子命令
# --name 指定插件模块为 demo
# --state 指定内存快照文件夹
# --backend 指定执行后端为 bochscpu
# --input 指定输入文件
$ .\wtf.exe run --name demo --state C:\Users\john\Desktop\workdir\state\ --backend=bochscpu --input C:\Users\john\Desktop\workdir\inputs\1.txt

执行如下:

原创Paper | 基于快照的 fuzz 工具 wtf 的基础使用 第12张

如果不能按预期执行,可以使用run命令生成路径覆盖,随后根据执行路径分析问题,下文我们将介绍在 wtf 如何获取路径覆盖。

随后我们便可以对其进行 fuzz:

$ cd C:\Users\john\Desktop\wtf-0.4\src\build
# 启动 server 节点
$ .\wtf.exe master --name demo --max_len=6 --runs=10000000 --target C:\Users\john\Desktop\workdir
# 启动一个 fuzz 节点
$ .\wtf.exe fuzz --name demo --backend=bochscpu --target C:\Users\john\Desktop\workdir

启动执行 2min 即可获得 crash 如下:

原创Paper | 基于快照的 fuzz 工具 wtf 的基础使用 第13张

其 crash 文件如下,顺序寻找到我们埋在 demo 程序中的两个异常错误:

原创Paper | 基于快照的 fuzz 工具 wtf 的基础使用 第14张

0x07覆盖率

参考资料

使用 wtf 的run子命令还可以生成路径覆盖,配合 IDA 以及 lighthouse 插件可以帮助我们排查 fuzz 问题和衡量 fuzz 的质量,如下:

$ cd C:\Users\john\Desktop\wtf-0.4\src\build
# 指定为 run 子命令
# --trace-path 设置覆盖率输出文件夹
# --trace-type 设置路径类型为 cov
$ .\wtf.exe run --name demo --state C:\Users\john\Desktop\workdir\state\ --backend=bochscpu --input C:\Users\john\Desktop\workdir\inputs\1.txt --trace-path=C:\Users\john\Desktop\workdir\coverage --trace-type=cov

执行完毕后将在C:\Users\john\Desktop\workdir\coverage下生成1.txt.trace文件,该文件没有符号化不能直接使用,使用作者提供的工具 symbolizer() 对其进行符号化处理:

$ cd C:\Users\john\Desktop\workdir\coverage

# --input 指定输入文件
# --crash-dump 指定内存快照文件
# -o 设置输出文件
# --style 指定符号化类型
$ C:\Users\john\Desktop\symbolizer\symbolizer.exe --input .\1.txt.trace --crash-dump C:\Users\john\Desktop\workdir\state\mem.dmp -o cov.txt --style modoff

执行完毕后,将在指定目录下生成符号化的路径覆盖文件cov.txt,如下:

原创Paper | 基于快照的 fuzz 工具 wtf 的基础使用 第15张

随后在 IDA 中加载wtf_test.exe文件,并使用 lighthouse 插件加载覆盖率文件如下:

原创Paper | 基于快照的 fuzz 工具 wtf 的基础使用 第16张

0x08 References

参考资料

原创Paper | 基于快照的 fuzz 工具 wtf 的基础使用 第17张

作者名片

原创Paper | 基于快照的 fuzz 工具 wtf 的基础使用 第18张

原创Paper | 基于快照的 fuzz 工具 wtf 的基础使用 第19张

往期热门

(点击图片跳转)

原创Paper | 基于快照的 fuzz 工具 wtf 的基础使用 第20张

原创Paper | 基于快照的 fuzz 工具 wtf 的基础使用 第21张

云服务器L实例使用教学 (1)

华为云云耀云服务器L实例使用教学

1. 云耀云服务器L实例简介

1.2 云耀云服务器与弹性云服务器区别

1.3 云耀负载均衡

2. 云耀服务器不同配置说明

2.1 云耀服务器L实例购买

2.1.1 不同类型云耀服务器L实例组合

2.1.1.1 云耀云服务器L实例

2.1.1.2 云耀服务组合

2.1.1.3 云耀负载均衡

2.1.2 云耀服务器地区选择

2.1.3 应用镜像&系统镜像选择

2.1.4 实例规则选择

2.2 云耀服务器L实例问题解决渠道

2.2.1 官方说明文档

2.2.2 提交快速相应工单

2.2.3 论坛求助

3. 总结

1. 云耀云服务器L实例简介

云耀云服务器(Hyper Elastic Cloud Server,HECS)是可以快速搭建简单应用的新一代云服务器,具备独立、完整的操作系统和网络功能。提供快速应用部署和简易的管理能力,适用于网站搭建、开发测试环境、企业应用等低负载应用场景。具有易搭建、更实惠、易维护、更安全的特点。

云耀云服务器L实例是华为云基于瑶光智慧云脑推出的新一代云服务器,具备独立、完整的操作系统和网络功能,可以快速搭建简单应用。它适用于多种低负载应用场景,如网站搭建、开发环境等,也可以用于中小企业和开发者的业务部署,如小程序、跨境电商、音视频服务端和私有云盘等场景。云耀云服务器L实例提供了快速的应用部署和简易的管理能力,同时集成了多个华为云产品的功能来帮助搭建和管理应用,使得管理和运维更加便捷。

原创Paper | 基于快照的 fuzz 工具 wtf 的基础使用 第22张

1.2 云耀云服务器与弹性云服务器区别

与弹性云服务器相比,云耀云服务器简化了购买ECS过程中的一些高级配置,一站式融合购买、登录、磁盘配置、网络配置、云监控、主机安全等多种功能,帮助您更加便捷高效的部署、配置和管理应用。

说明:

HECS底层使用的物理硬件资源与ECS一致,同CPU、内存的HECS与ECS计算能力在同一标准。

云耀云服务器与弹性云服务器的主要区别:

•云耀云服务器:云耀云服务器是可以快速搭建简单应用的新一代云服务器,按已搭配的套餐售卖,适用于低负载应用场景,可以更加便捷、更加高效的部署、配置和管理应用。

说明:

高负载应用场景推荐使用弹性云服务器ECS,性能更稳定。

•弹性云服务器:弹性云服务器提供多种计费模式、规格类型、镜像类型、磁盘类型,针对不同的业务场景,自定义配置弹性云服务器。

1.3 云耀负载均衡

弹性负载均衡(Elastic Load Balance,简称ELB)是将访问流量根据分配策略分发到后端多台服务器的流量分发控制服务。弹性负载均衡可以通过流量分发扩展应用系统对外的服务能力,同时通过消除单点故障提升应用系统的可用性。

如下图所示,弹性负载均衡将访问流量分发到后端三台应用服务器,每个应用服务器只需分担三分之一的访问请求。同时,结合健康检查功能,流量只分发到后端正常工作的服务器,从而提升了应用系统的可用性。

原创Paper | 基于快照的 fuzz 工具 wtf 的基础使用 第23张

弹性负载均衡由以下3部分组成:

原创Paper | 基于快照的 fuzz 工具 wtf 的基础使用 第24张

•负载均衡器:接受来自客户端的传入流量并将请求转发到一个或多个可用区中的后端服务器。

•监听器:您可以向您的弹性负载均衡器添加一个或多个监听器。监听器使用您配置的协议和端口检查来自客户端的连接请求,并根据您定义的分配策略和转发策略将请求转发到一个后端服务器组里的后端服务器。

•后端服务器

每个监听器会绑定一个后端服务器组,后端服务器组中可以添加一个或多个后端

原创Paper | 基于快照的 fuzz 工具 wtf 的基础使用 第25张

2. 云耀服务器不同配置说明

在云耀云服务L实例控制台,有很多不同种类,不同规格,不同地区的产品供我们选择,那么我们怎样根据自己的业务需求选择不同类型的云耀服务器L实例产品呢?

2.1 云耀服务器L实例购买

进入云耀服务器L实例控制台:

首页会展示我们已经购买后的云耀资源

原创Paper | 基于快照的 fuzz 工具 wtf 的基础使用 第26张

2.1.1 不同类型云耀服务器L实例组合

点击右侧购买资源,可以看到有三种规格供我们选择,分别是云耀云服务器L实例,云耀服务组合,云耀负载均衡

原创Paper | 基于快照的 fuzz 工具 wtf 的基础使用 第27张

2.1.1.1 云耀云服务器L实例

云耀云服务器L实例即云耀云服务器,是由CPU、内存、操作系统、云硬盘组成的基础的计算组件。

云耀云服务器创建成功后,您就可以像使用自己的本地PC或物理服务器一样,在云上使用云耀云服务器,打造一个高效、可靠、安全的计算环境。云耀云服务器的开通是自助完成的,您只需要指定镜像、配置(包括CPU、内存)即可。在云耀云服务器的使用过程中,也可以根据您的需求随时调整您的云服务器规格。

原创Paper | 基于快照的 fuzz 工具 wtf 的基础使用 第28张

2.1.1.2 云耀服务组合

云耀服务组合是包括云耀服务器L实例,云备份CBR,主机安全HSS在内的组合套餐。极大地提高的云耀服务器的稳定性和安全性

原创Paper | 基于快照的 fuzz 工具 wtf 的基础使用 第29张

2.1.1.3 云耀负载均衡

云耀负载均衡是将公网访问流量根据转发规则分发到多台服务器的流量分发控制服务,可以通过流量分发扩展应用系统对外的服务能力。同时结合健康检查功能,流量只分发到后端正常工作的服务器来消除单点故障,进而提升应用系统的可靠性。

云耀负载均衡只能和同区域下的云服务器配套使用,不能单独使用。

•使用云耀负载均衡为高访问量业务进行流量分发,对于业务量访问较大的业务,可以通过云耀负载均衡将访问量均匀的分配到多个后端服务器处理。

•使用云耀负载均衡消除单点故障增加可靠性对可靠性有较高要求的业务,可添加多个后端云服务器。负载均衡器会通过健康检查及时发现并屏蔽有故障的云服务器,并将流量转发到其他正常运行的后端云服务器,确保业务不中断。

云耀负载均衡的组件

云耀负载均衡由以下3部分组成:

•负载均衡器:接受来自客户端的传入流量并将请求转发到一个或多个后端服务器。

•监听器:您可以向您的负载均衡器添加一个或多个监听器。监听器使用您配置的协议和端口检查来自客户端的连接请求,并根据您定义的分配策略和转发策略将请求转发到一个后端服务器组里的后端服务器。

•后端服务器:每个监听器会绑定一个后端服务器组,后端服务器组中可以添加一个或多个后端服务器。后端服务器组使用您指定的协议和端口号将请求转发到一个或多个后端服务器。

原创Paper | 基于快照的 fuzz 工具 wtf 的基础使用 第30张

2.1.2 云耀服务器地区选择

云耀服务器L实例目前提供华北-北京四,华东-上海一,华南-广州三个区域的服务器

不同区域的云服务产品之间内网互不相通;请就近选择靠近您业务的区域,可减少网络时延,提高访问速度。

于区域选择,可以按照下面规则选择合适的区域

原创Paper | 基于快照的 fuzz 工具 wtf 的基础使用 第31张

•地理位置就近原则。根据用户群所在位置,应就近选择区域以减少网络时延,提高访问速度。

•不同区域价格差异。不同区域的服务器价格可能会有所不同,因此需考虑预算和成本效益。

•备案考虑。根据所在的行业和业务需求,有些区域可能需要特定的备案或审批手续,应该提前了解和考虑。

•多产品同区域内网互通。如果需要将多个华为云产品部署在同一区域内,以便实现内网互通,可以提高访问速度和数据传输效率。

2.1.3 应用镜像&系统镜像选择

我们可以按照自己的业务需求来选择应用镜像或者系统镜像

云耀服务器L实例控制台提供了大量常用的应用镜像,我们可以通过一键部署的方式来使用相关应用服务,当然也可以选择纯净操作系统镜像

原创Paper | 基于快照的 fuzz 工具 wtf 的基础使用 第32张

原创Paper | 基于快照的 fuzz 工具 wtf 的基础使用 第33张

2.1.4 实例规则选择

目前云耀服务器L实例提供的规格版本相对较少,但已经足以满足大部分用户需求

下面是给大家部署不同应用选择不同规格配置服务器的一些建议

•中小型企业网站:对于简单的企业网站,如个人博客或企业展示网站等,所需的云服务器硬件配置相对较低。可以选择1核2G的硬件配置,适用于基本的企业网站需求,包括网页浏览、产品展示等。若网站流量不大,可以选择更低配置的云服务器,如1核1G的硬件配置。

以一个简单的企业网站为例,该企业网站主要用于展示公司信息和产品介绍,每天的访问量在1000人次左右。可以选择1核2G的云服务器,以满足基本需求。

•影视站:影视站尽管属于大流量企业网站,但有的不是引用的外部视频连接,而是上传至服务器。这样使得云服务器内存需求更大,不仅如此,影视站的视频清晰度跟云服务器管理带宽、核心线程也有关系。这类为不影响用户体验建议采用高配置的硬件配置,如8核16G、32G内存,10M带宽的硬件配置(前提是网站流量)。如果担心硬件配置太小,可以记住云服务器弹性升级优势。

以一个中等规模的影视站为例,该网站每天的视频播放量在10万次左右,视频文件大小在几十GB。为保证播放流畅和用户体验,可以选择8核16G、32G内存的云服务器,并配备10M带宽的网络连接。如果网站流量继续增长,可以通过云服务器的弹性升级功能进行扩展。

•特殊类型:如果是防御类型可选择高防云服务器,其高防云服务器管理选择原理与上述一样,只不过增加了防御功能。还有企业网站站群需求、大带宽需求的,不过这类就建议选择物理服务器比较好。

以一个处于发展期的在线购物网站为例,该网站每天有大量的商品浏览和交易请求,同时需要提供安全的支付服务。可以选择高防云服务器来确保网站的安全性和稳定性。针对大规模的数据处理和存储需求,可以选择物理服务器或者大规模的云服务器集群来满足。

在选择云服务器硬件配置时需要考虑应用场景、流量大小、可承受成本等因素。根据实际需要合理选择合适的硬件配置可以确保网站的稳定性和可用性。同时需要注意云服务器的可弹性升级优势,避免资源浪费和性能不足的问题。

2.2 云耀服务器L实例问题解决渠道

2.2.1 官方说明文档

官方说明文档链接:

原创Paper | 基于快照的 fuzz 工具 wtf 的基础使用 第34张

当我们在使用云耀服务器L实例过程中遇到问题,可以在控制台下方查看解决方案

还有一些最佳实践案例供开发者学习使用

原创Paper | 基于快照的 fuzz 工具 wtf 的基础使用 第35张

原创Paper | 基于快照的 fuzz 工具 wtf 的基础使用 第36张

2.2.2 提交快速相应工单

当我们使用云耀云服务器L实例过程中遇到紧急问题,可以通过提交工单方式得到华为工程师快速相应

在控制台右上角可以选择提交工单

原创Paper | 基于快照的 fuzz 工具 wtf 的基础使用 第37张

2.2.3 论坛求助

华为云论坛:

原创Paper | 基于快照的 fuzz 工具 wtf 的基础使用 第38张

在华为云论坛有许多互帮互助的开发者,大家一起交流讨论解决问题,还可学到很多技术干货

3. 总结

本文介绍了华为云云耀云服务器 L 实例及其与弹性云服务器的区别。云耀云服务器 L 实例是新一代可快速搭建简单应用的云服务器,适用于低负载应用场景如网站搭建、开发测试环境等,具有易搭建、更实惠、易维护、更安全的特点。与弹性云服务器相比,云耀云服务器简化了购买 ECS 过程中的高级配置,融合多种功能,更加便捷高效。云耀负载均衡可将访问流量分发到多台应用服务器,提高系统可用性。本文还介绍了云耀服务器不同配置说明以及云耀服务器 L 实例购买和问题解决渠道。

阿里云linux安装及使用mysql

环境centos7.0

1,首先查看自己是否安装过mysql

rpm -qa | grep mysql

如果什么都不显示即表示未使用rmp安装mysql

但是不一定表示没有mysql,再查看一下mysql的状态,如果有mysql的话,会显示mysql和它的状态

service mysql status

原创Paper | 基于快照的 fuzz 工具 wtf 的基础使用 第39张

也可以使用命令查看mysql的进程

ps -aux | grep mysql

原创Paper | 基于快照的 fuzz 工具 wtf 的基础使用 第40张

查看服务和查看mysql有显示的mysql内容就表示已经安装

2,下载mysql

推荐先进入根目录下的home文件夹在里面创建一个mysql文件夹。方便操作和记录。(创建文件夹命令为mkdir mysql)

 wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz

下图表示正在下载

原创Paper | 基于快照的 fuzz 工具 wtf 的基础使用 第41张

使用wget命令从指定的URL下载文件,会将后面的内容下载到所在的位置,比如你在home中,就会下载到home下面。这样就可以省去下载到自己电脑上再使用ftp传到服务器上的步骤。

这里下载的是mysql5.7版本

3,解压和移动

tar xzvf mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz

这样就会在你所在的位置解压出一个文件夹,使用ls命令就可以查看你所在的文件夹中所包含的内容

之后我们将这个解压出来的文件夹移动到/usr/local/下并改名为mysql(这个时候我们的位置需要不能动即在/home/mysql下)mv命令是可以移动文件以及为文件改名。注意:移动文件时目标位置必须没有与移动文件相同名字的文件,即在/usr/local/下没有mysql

mv mysql-5.7.24-linux-glibc2.12-x86_64 /usr/local/mysql

这个时候解压后的文件就在/usr/local/下并且改名为mysql

4,创建data目录,并赋予其他文件相应权限

在mysql中创建data文件夹

mkdir /usr/local/mysql/data

原创Paper | 基于快照的 fuzz 工具 wtf 的基础使用 第42张

更改mysql目录下所有的目录及文件夹所属的用户组和用户,以及赋予相应的权限

useradd mysql
chown -R mysql:mysql /usr/local/mysql
chmod -R 755 /usr/local/mysql

5,进入mysql中进行编译安装(就像在windows安装exe文件)

首先进入MySQL中的bin目录

cd /usr/local/mysql/bin

进行编译和安装

./mysqld --initialize --user=mysql --datadir=/usr/local/mysql/data --basedir=/usr/local/mysql

成功后会在最后显示默认密码这个需要记住

原创Paper | 基于快照的 fuzz 工具 wtf 的基础使用 第43张

6,修改配置文件

vim /etc/my.cnf

并且添加如下配置

[mysqld]
datadir=/usr/local/mysql/data
port = 3306
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
symbolic-links=0
max_connections=400
innodb_file_per_table=1

默认表名大小写不明显,如果想要修改为明显需要添加如下一行

lower_case_table_names=1

之后进行启动mysql

/usr/local/mysql/support-files/mysql.server start

在mysql后面显示【ok】表示启动成功

7,添加软链接

ln -s /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
ln -s /usr/local/mysql/bin/mysql /usr/bin/mysql

就像windows中的快捷方式,可以在任意位置启动这个服务。而不是需要进入mysql对应的bin中启动

使用快捷方式重启mysql

service mysql restart

8,进入mysql中,修改密码并开启远程

mysql -u root -p

之后会让你输入密码需要输入之前编译安装后出现的密码。注意:输入时没有任何显示,不要认为是没输入进去。只是它不显示然后我们修改密码,yourpass是你需要设置的密码。用来以后在服务器上登录mysql数据库

原创Paper | 基于快照的 fuzz 工具 wtf 的基础使用 第44张

set password for root@localhost = password('yourpass');

进入后我们使用mysql数据库

use mysql;

之后开放权限(这里功能有很多,可以指定ip连接数据库,并且还可以赋予指定的账号密码连接,也就是不同的ip可以用不同的账号密码,并且还可以赋予不同的权限就像增删改查)想要了解更多可以查询MySQL中的grant命令。

下面的命令是让所有的ip都可以访问,并且用户为root,密码也就是和刚才设置的登录数据库的密码一样

update user set user.Host='%' where user.User='root';

之后需要刷新权限,要不然进行的操作只是保存了并没有执行

flush privileges;

之后我们退出mysql命令行

exit;

9,开放防火墙

这个时候我们想要远程操作还需要打开服务器对应mysql数据库的3306端口别的电脑才能通过这个端口进入mysql数据库

查看firewall防火墙的状态(不同的linux防火墙可能不同,也会有iptables防火墙)

systemctl status firewalld

下图表示防火墙没有开。可以使用systemctl start firewalld开启防火墙,开启后进行配置下面的内容。不开启的话就不用配置下面的内容

原创Paper | 基于快照的 fuzz 工具 wtf 的基础使用 第45张

查看3306端口是否开放

firewall-cmd --query-port=3306/tcp

如果没开放就开放3306端口

firewall-cmd --permanent --add-port=3306/tcp

注意这个也和mysql刷新权限一样,修改规则后需要重启才能生效,重启防火墙

firewall-cmd --reload

10,如果是阿里云的话,需要去控制台打开防火墙中的3306端口

下图是阿里云轻量型服务器打开3306端口

原创Paper | 基于快照的 fuzz 工具 wtf 的基础使用 第46张

下图是阿里云ECS服务器打开3306端口

原创Paper | 基于快照的 fuzz 工具 wtf 的基础使用 第47张


免责声明
1、本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明。
2、本网站转载文章仅为传播更多信息之目的,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所
提供信息的准确性及可靠性,但不保证信息的正确性和完整性,且不对因信息的不正确或遗漏导致的任何
损失或损害承担责任。
3、任何透过本网站网页而链接及得到的资讯、产品及服务,本网站概不负责,亦不负任何法律责任。
4、本网站所刊发、转载的文章,其版权均归原作者所有,如其他媒体、网站或个人从本网下载使用,请在
转载有关文章时务必尊重该文章的著作权,保留本网注明的“稿件来源”,并白负版权等法律责任。

手机扫描二维码访问

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

发表评论

快捷回复: 表情:
评论列表 (暂无评论,5209人围观)

还没有评论,来说两句吧...

目录[+]