本文记录了对某发行版Linux中一个安全模块(LSM)的逆向过程,该LSM对系统中待运行的程序进行安全校验,数据流穿越内核态与用户态,涉及系统内核及系统服务。此LSM对系统安全性的增强效果明显,其设计思路值得防守方研究学习,可于个人终端或服务器安全防护中应用。特此对逆向内容记录,希望能为读者在终端防护方面拓宽思路,同时欢迎感兴趣的师傅们交流学习。
1, 编译器编译源代码生成的文件叫做目标文件。 从结构上说,是编译后的可执行文件,只不过还没有经过链接 3.1 目标文件的格式 1,可执行文件的格式: Windows下的PE 和 Linux下的ELF 2,从广义上说,目标文件与可执行文件的格式几乎是一样的,所以广义上可以将目标文件与可执行文件看成是一种类型的文件。 3,可执行文件,动态链接库,静态链接库都按照可执行文件格式存储(Windows下是 PE-COFF格式,Linux下是ELF格式)。 4,Linux下命令: $: file ***
luject是一个静态注入动态库的工具,它可以实现对mac, ios, linux, windows的可执行程序,动态库程序进行修改,来插入指定动态库实现注入和加载。
在 《漫画解说内存映射》一文中介绍过 虚拟内存 与 物理内存 映射的原理与过程,虚拟内存与物理内存进行映射的过程被称为 内存映射。内存映射是硬件(内存管理单元)级别的功能,必须按照硬件的规范设置好内存映射的关系,进程才能正常运行。
ROP的全称为Return-oriented programming(返回导向编程),这是一种高级的内存攻击技术可以用来绕过现代操作系统的各种通用防御(比如内存不可执行和代码签名等)。通过上一篇文章栈溢出漏洞原理详解与利用,我们可以发现栈溢出的控制点是ret处,那么ROP的核心思想就是利用以ret结尾的指令序列把栈中的应该返回EIP的地址更改成我们需要的值,从而控制程序的执行流程。
霍尼韦尔 Experion 过程知识系统 (PKS) 是一种在全球和不同行业中广泛采用的 DCS。 这个庞大的自动化平台集成了来自整个环境的控制器的数据,提供了全厂流程的集中视图。 该系统主要使用 C200、C300 和 ACE 控制器,可通过霍尼韦尔工程工作站软件 Experion PKS Configuration Studio 进行编程。 然后可以将逻辑(开发为框图)从工程工作站下载到 DCS 中的不同组件。
对于所有shellcode,请参阅“ msfvenom –h”以获取有关有效参数的信息。Msfvenom将输出能够以这种语言剪切和粘贴的代码,来供利用。
近日,Palo Alto Networks公司Unit 42的最新研究已经确定了4个新兴勒索软件组织,并表示未来它们完全有潜力成为更大的麻烦。这些组织分别为Avoslocker、Hive Ransomware、Hellokitty以及Lockbit 2.0。
Lacework Labs 最近发现了一个新的在野 Rootkit。除了释放的内核模块和用户态样本文件外,还针对 Dropper 进行了深入了解。
pstack在linux上是一个非常有用的工具,可以查看进程内部调用函数的信息。可惜的是在ubuntu10.10版本中没有找到这个工具。无奈,只能下载尝试编译了。
1、Lacework Labs在Avast公司的同事最近初步的鉴定基础之上,标识出与 HCRootkit / Sutersu Linux Rootkit活动相关的新样本和基础设施。
BTF(BPF Type Format)是内嵌在BPF(Berkeley Packet Filter)程序中的数据结构描述信息。BPF原本是用于数据包过滤的编程语言,但随着eBPF(extended BPF)的发展,它的用途已经扩展到多种内核子系统中,包括性能监测、网络安全和配置管理等。 BTF是为了实现更复杂的eBPF程序而设计的。其提供了一种机制,通过它可以将编程时使用的数据结构(如C语言中的结构体、联合体、枚举等)的信息嵌入到eBPF程序中。这样做的主要目的是为了让eBPF程序在运行时能够具有类型安全(Type Safety),同时也便于内核和用户空间的程序理解和操作这些数据结构。 在eBPF程序开发过程中,用户通常会在用户空间编写C代码,然后使用特定的编译器(如clang)编译这些代码为eBPF字节码。由于C程序中定义的复杂数据结构信息在编译为eBPF字节码过程中会丢失,因此BTF被设计来保留这些信息。当eBPF程序加载到内核时,BTF信息可以被内核使用,以确保程序操作的数据结构与内核预期的一致,从而保证程序的正确运行。 举个例子,如果eBPF程序需要访问内核数据结构,BTF就能够提供这些内核数据结构的确切布局,让eBPF程序能够安全而准确地读取或修改这些数据。 总之,BTF使得eBPF程序能更安全且方便地与复杂的数据类型互动,并有助于提高eBPF程序与内核间的兼容性和稳定性。
目前,我认为在Linux防病毒方面做得比较好的安全厂商有Avast,Eset 和 Kaspersky。当然,本文的目的并不是为了推广某个产品,而是希望通过实例测试将其作为红队练习的一部分进行学习,并了解什么会被标记或是通过(Metasploit/Meterpreter/Mettle)。
之前写过一篇文章 Linux下c语言中的main函数是如何被调用的,该篇文章侧重于从user space层面讲程序的运行,而文章中提到的有关kernel space层面的相关系统调用,比如fork、execve等,都被一笔带过。
一种是固定的、静态的连接,就是把需要用到的库函数的目标代码(二进制)代码从程序库中抽取出来,链接进应用软件的目标映像中;
在 “Linux 发布 5.1, Linux Lab 同步支持” 一文中,首次得知了 Linux 移除 a.out 格式的消息,这个消息着实令人感叹,因为 a.out 伴随 Linux 的诞生至今在 Linux 中有将近 ~28 年的历史,而 a.out 本身则要追溯到更早的 Unix 时代。
目标文件是源代码编译后未进行链接的中间文件(Windows的.obj和Linux的.o),与可执行文件(Windows的.exe和Linux的ELF)的结构和内容相似,因此跟可执行文件采用同一种格式存储。PC平台常见的可执行文件格式主要有Windows的PE(Portable Executable)和Linux的ELF(Executable and Linkable Format)。PE和ELF都是通用目标文件格式(COFF,Common Object File Format)的变种。在Windows下,我们将目标文件与可执行文件统称为PE-COFF文件,Linux统称为ELF文件。除此之外,还有些不常用的目标文件与可执行文件格式,比如Intel和Microsoft以前使用的对象模型文件(OMF,Object Module File)、Unix的最初使用的a.out和MS-DOS的.COM格式等。
我们在写完代码后,进行简单的编译,然后在 shell 命令行下就可以把它启动起来。
(编者注:本翻译不代表登链社区的立场,也不代表我们(有能力并且已经)核实所有的事实并把他的观点分离开来。)
GPFDAT的第4位为0-低电平,1-高电平。(注:corresponding,相应的)
ROPgadget是一款可以在二进制文件中搜索Gadget的强大工具,本质上来说,ROPgadget 是一个小工具查找程序和自动操作程序。在该工具的帮助下,广大研究人员可以在二进制文件中搜索Gadget,以方便我们实现对 ROP 的利用。ROPgadget 支持 x86,x64,ARM,PowerPC,SPARC 和 MIPS 体系结构,并支持 ELF / PE / Mach-O 格式。
前言:近期,一款专门针对IoT设备的恶意软件开始暗中活动,它被命名为SBIDIOT,造成的主要威胁是分布式拒绝服务(DDos)攻击。目前它在 VirusTotal上的检测数量相对较少,并且网络安全社区也暂时没有和它相关的充分记录。尽管某些物联网僵尸网络专门从事加密货币挖掘或欺诈活动,但与SBIDIOT恶意软件相关联的僵尸网络几乎完全致力于DDoS攻击。
但是在检查后发现,并没有出现include多次头文件,也只有这一个定义ELF_FILE结构体的地方
https://espressif.github.io/arduino-esp32/package_esp32_index.json
首先看linux进程在32位处理器下的虚拟空间内存布局,以i386 32位机器为例
作者简介: 伟林,中年码农,从事过电信、手机、安全、芯片等行业,目前依旧从事Linux方向开发工作,个人爱好Linux相关知识分享。 原理概述 为什么要研究链接和加载?写一个小的main函数用户态程序,或者是一个小的内核态驱动ko,都非常简单。但是这一切都是在gcc和linux内核的封装之上,你只是实现了别人提供的一个接口,至于程序怎样启动、怎样运行、怎样实现这些机制你都一无所知。接着你会对程序出现的一些异常情况束手无策,对内核代码中的一些用法不能理解,对makefile中的一些实现不知所云。所以这就是我们
上一篇文章中,我们介绍了如何让汇编语言与 C 语言相互调用: 如何实现汇编语言与 C 语言之间的相互调用
🚀🚀这个地方的代码还是很简单的,主要就是去哪找CCM的地址,不过也不算难找,比如CCGR0,就是0x020c4068。
本节我们结合前面的知识点,通过动手实践来分析一个”恶意“程序。这次我们使用的例子具有极强的动手实践性,它也非常能代表恶意程序入侵系统的很多流程步骤,跟着做下来你一定收获颇多。
多种姿势花样使用Frida注入是怎么回事呢?Frida相信大家都很熟悉,但是多种姿势花样使用Frida注入是怎么回事呢,下面就让小编带大家一起了解吧。 多种姿势花样使用Frida注入,其实就是用不止一种方式注入Frida,大家可能会很惊讶Frida为什么要用多种方式注入?但事实就是这样,小编也感到非常惊讶。 这就是关于多种姿势花样使用Frida注入的事情了,大家有什么想法呢,欢迎在评论区告诉小编一起讨论哦!
那么多对于我们初学者来说要学习哪种风格呢?答案是肯定的,学习GNU风格的汇编代码,因为做Linux驱动开发必须掌握的linux内核、uboot,而这两个软件就是GNU风格的。
Windows 基本占领了电脑时代的市场,商业上取得了很大成功,但是它并不开源,所以要想接触源码得加入 Windows 的开发团队中。
ELF文件格式,是一个开放的可执行文件和链接文件格式,其主要工作在Linux系统上,是一种用于二进制文件、可执行文件、目标代码、共享库和核心转储格式文件,ELF文件格式类似于PE格式,但比起PE结构来ELF结构显得更加的简单,Linux文件结构相比于Windows结构来说简单一些.
通过GDB等调试器,可以检查一个软件线程当前的函数调用关系(backtrace),也就是a调用b,b调用c,c调用d之类的。 当出现异常时,Linux kerenl会自动打印当前的函数调用关系(backtrace),为定位问题提供了不少信息。 在Linux应用程序中,也可以打印当前的函数调用关系(backtrace),GNU为此提供了backtrace ( )和backtrace_symbols( )。以前曾经测试过,发现没有生效,backtrace ( )返回0。 最近测试,发现backtrace ( )能返回大于0的数,说明工作正常。 另外,在编译器增加选项“-fno-omit-frame-pointer”,在连接器增加选项“-rdynamic”,可以打印出更多信息。
在Linux中,可执行文件的格式是ELF格式,而有一些命令可以帮助我们了解它们更多的“秘密”,以此来帮助我们解决问题。
今天给大侠带来FPGA Xilinx Zynq 系列第三十七篇,开启第二十四章,带来Linux 启动相关内容,本篇为本系列最后一篇,本篇内容目录简介如下:
这是一个系列的文章,会逐步带大家去实现一个PHP协程扩展。我们把这个扩展叫做study。
作为过来人,我发现很多程序猿新手,在编写代码的时候,特别喜欢定义很多独立的全局变量,而不是把这些变量封装到一个结构体中,主要原因是图方便,但是要知道,这其实是一个不好的习惯,而且会降低整体代码的性能。
博客地址 : http://blog.csdn.net/shulianghan/article/details/42239705
近期研究了一下elf文件格式,发现好多资料写的都比較繁琐,可能会严重打击学习者的热情,我把自己研究的结果和大家分享,希望我的描写叙述可以简洁一些。
在了解了共享对象的绝对地址的引用问题后,我们基本上对动态链接的原理有了初步的了解,接下来的问题是整个动态链接具体的实现过程了。动态链接在不同的系统上有不同的实现方式。ELF的动态链接的实现方式会比PE的简单一点,在这里我们先介绍ELF的动态链接过程在LINUX下的实现,最后我们会专门的章节中介绍PE在Windows下的动态链接过程和它们的区别
在linux中输入vi Makefile 来实现创建Makefile文件 注意:命令行前必须加TAB键 例如:将两个文件led.c和crt0.S汇编文件,制作一个Makefile文件 1 1 led
开发后端有很多的编程语言,目前比较流行的就是python ,c,cpp,java,js,php,rust,golang ..
最近在研究ARM cpu 32 bit转码 64bit的事情,以用于在64bit的服务器上可以更快的运行32bit的Android ELF文件。
本文介绍了ELF的基本结构和内存加载的原理,并用具体案例来分析如何通过ELF特性实现HIDS bypass、加固/脱壳以及辅助进行binary fuzzing。
可执行文件的装载 进程和装载的基本概念的介绍 程序(可执行文件)和进程的区别 程序是静态的概念,它就是躺在磁盘里的一个文件。 进程是动态的概念,是动态运行起来的程序。 现代操作系统如何装载可执行文件 给进程分配独立的虚拟地址空间 将可执行文件映射到进程的虚拟地址空间(mmap) 将CPU指令寄存器设置到程序的入口地址,开始执行 可执行文件在装载的过程中实际上如我们所说的那样是映射的虚拟地址空间,所以可执行文件通常被叫做映像文件(或者Image文件)。 可执行ELF文件的两种视角 可执行ELF格式具有不寻常的
一个可执行文件被执行的同时也伴随着一个新的进程的创建。Linux会为这个进程创建一个新的虚拟地址空间,然后会读取可执行文件的文件头,建立虚拟地址空间与可执行文件的映射关系,然后将CPU的指令指针寄存器设置成可执行文件的入口地址,然后CPU就会从这里取指令执行。
本篇文章晚了两三天发,说明一下原因哈,最近在搞TSRC和青藤云的webshell挑战赛,时间被挤压了,文章会晚到,但不会缺席,继续今年的Flag。突然发现写完凌晨三点了,赶紧睡觉。。。
领取专属 10元无门槛券
手把手带您无忧上云