- 博客(86)
- 资源 (3)
- 收藏
- 关注

原创 wazuh 日志收集原理分析
wazuh 默认安装到 /var/ossec目录下。我基于manager端进行分析,和agent一样。默认启动ossec-logcollector进程去搜集日志:比如 snort日志、auditd日志、syslog日志等。入口函数代码在src/logcollector/main.c中。int main(int argc, char **argv){ /* 初始化处理: 命...
2019-11-05 18:25:42
4845

原创 Collectl 监控进程 和 产生plot格式文件
Collectl 也是一款性能监控工具。工作需求,需要监控一些进程的cpu信息。上网搜资料发现可以使用Collectl来监控。collectl -sZ 即可监控进程信息,会在终端输出,数据类似top命令的格式,默认60秒刷新一次。如果不想在终端输出,想保存在文件中可以使用-f/tmp ,保存在/tmp目录下 raw格式的文件ls /tmp/localhost-2...
2019-08-26 19:46:05
233
2

原创 linux 审计(auditd)原理分析
前面几篇博客说过可以使用auditctl 添加和删除规则等。现在谈谈auditd的相关实现。基于 Linux2.6.11.12这些代码主要在下面的文件中kernel/audit.c 提供了核心的审计机制。kernel/auditsc.c 实现了系统调用审计、过滤审计事件的机制。用户可以使用应用程序auditctl向内核添加规则,内核检测到这些变动之后,会在进程创...
2019-08-18 23:25:59
2481

原创 snort 源码分析之模式匹配引擎
snort是一款著名的开源IPS,其主页地址:点击打开链接。更详细的介绍网上很多,可自行搜索了解。本博客主要介绍snort-2.9.5版本的模式匹配引擎的加载和匹配。 模式匹配引擎主要使用多模式匹配算法和单模式匹配算法。先由多模式匹配算法大概确定有哪些规则可能匹配成功,然后再通过单模式匹配算法去精确匹配。其配置格式如下:config detection: search-me...
2017-03-20 16:06:05
3884
3
原创 windows7 Ubuntu 16.04.6 smb共享 (遇到的问题)
今天打算编译内核,然后调试理解协议栈的原理和代码,通过source insight 阅读代码,如果在Windows下创建工程,代码linux目录下,这个时候需要共享目录来使用ubuntu下的代码建立工程。这样就不要将代码再拷贝到ubuntu的/usr/src/linux下面编译了。可以直接编译。共享方式采用smb服务。参照网上smb的搭建方式来操作。系统起来,在Windows文件夹下面访问smb服务,发现访问不到,原来是新加的用户没有启用,执行sudo smbpasswd -e username 就
2020-11-28 22:36:44
19
原创 Linux c 程序打印堆栈方法及注意事项
通过调用backtrace和backtrace_symbols可以打印出当前的调用堆栈.以下是代码例子,参照gnu Backtraces 文档#include <execinfo.h>#include <stdio.h>#include <stdlib.h>/* Obtain a backtrace and print it to stdout. */voidprint_trace (void){ void *array[10]; char
2020-11-23 21:26:15
45
原创 cpu cache valgrind cachegrind测试
#include <stdio.h>#include <unistd.h>#include <sys/time.h>#include <stdlib.h>int MAX_SIZE = 10240;int main(){ float time_use=0; struct timeval start; struct timeval end; int **array = NULL; int i,j, num = 0; .
2020-11-02 12:08:25
67
原创 strftime时间格式化与逆操作strptime
#include<stdio.h>#include<string.h>#include<time.h>int main(){ time_t rawtime, rt2; struct tm *timeinfo, tm2; char timE[80]; time(&rawtime); timeinfo=localtime(&rawtime); long len = 0; len = strftime(timE,80,"%Y%m%d:%.
2020-09-12 15:23:37
28
原创 curl 命令行创建目录和检查目录是否存在 (ftp/ftps)
创建目录curl -u -u admin:123456 --ftp-ssl -k ftp://10.121.215.220 -Q "MKD this_is_a_test"curl -u admin:123456 ftp://10.121.215.218 -Q "MKD FTP"curl --ftp-ssl -u admin:123456 -k ftp://10.121.215.220 -Q "MKD this_is_a_test"检查目录是否存在curl -u admin:123..
2020-09-02 20:57:16
220
原创 libcurl 在ftp/ftps服务器上面创建目录
#include <iostream>#include <string.h>#include <curl/curl.h>int main(){ char temp[2000]; struct curl_slist *headerlist=NULL; CURL *curl = curl_easy_init(); curl_easy_setopt(curl, CURLOPT_URL, "ftp://admin:123456@192.168.1.150");.
2020-09-02 19:12:51
192
原创 libcurl检测FTP/FTPS服务器是否存在某个目录
#include <iostream>#include <curl/curl.h>int main(){ CURL *curl = curl_easy_init(); /* FTP_DIR 为对应的目录 */ curl_easy_setopt(curl, CURLOPT_URL, "ftp://admin:123456@192.168.0.150/FTP_DIR"); curl_easy_setopt(curl, CURLOPT_NOBODY, 1L); c.
2020-09-02 18:59:11
21
原创 gdb 查看全局变量字符数组 (编译时不带-g)
#include <stdio.h>#include <sys/types.h>#include <sys/stat.h>#include <unistd.h>char g_file_name[100] = "this is a test";char * g_str_ptr = "this is a test"; int main(){ char file_name[100] = "stat_test.c"; struct stat s.
2020-08-18 09:55:38
169
原创 ubsan gcc -fsanitize=undefined 检测栈溢出
The Undefined Behavior Sanitizer - UBSANUBSAN is a runtime undefined behaviour checker.UBSAN uses compile-time instrumentation to catch undefined behavior (UB). Compiler inserts code that perform certain kinds of checks before operations that may cause
2020-06-23 20:46:12
379
原创 dmesg 使用
在‘dmesg’命令后跟随‘tail’命令(‘ dmesg | tail -100’)来输出‘dmesg’命令的最后100行日志dmesg | tail -100
2020-05-22 11:02:49
28
原创 snprintf printf %02d 是假的
#include <stdio.h>int main(){ int ret = 0; char c[10] ={}; ret = snprintf(c, 10, "wwwwwwwwwwwwww"); printf("%s, %d\n", c, ret); int id = 0; sscanf("4444", "%d", &id); printf("id :%2d\n", id); return 0;}结...
2020-05-21 14:25:06
118
原创 字节序转换异常问题
在定位产品问题的过程中,发现对数据包IPV6包长度不对,定位发现,在进行计算时先将主机序转成网络序,然后两个网络序数值相加导致数据异常。下面以一段代码事例说明问题 :#include <stdio.h>#include <arpa/inet.h>int main(){ unsigned short i = 248, j = 40; unsigned short test = 0, test2= 0; test = htons(i)
2020-05-13 20:54:21
109
原创 tcpreplay 回放报文
sudo tcpreplay --loop=0 --mbps=10.0 --intf1=enp4s0 Downloads/test.pcap表示 以10M/s的速度无限循环回放此报文。--loop=0 :无限回放--intf1=enp4s0 : 使用哪个网卡...
2020-04-10 09:25:51
382
原创 wireshark 导出指定tcp流的数据包
数据包回放时,如果我们只想将pcap包中的部分数据进行回放,怎么办呢,首先使用wireshark打开文件, 在过滤器中进行过滤,比如我只想要tcp.stream eq 0的数据,可以如下操作:过滤好数据,然后依次操作 文件=>导出特定分组=>文件名称。写好就行了,比如test.pcap最后到指定的目录下打开相应文件,检查是否与预期一致;...
2020-03-31 20:12:22
1635
原创 串口连设备 Incorrect username or password!
最近在通过串口连设备的时候,需要用户名密码,然后登陆一直报错Username:Username:Username:admbsp_pci_scan_slot[16] not find dev 0xb746inPassword:static rule recover endIncorrect username or password!Username:Username:Usern...
2020-03-26 18:25:44
112
原创 samba Error NT_STATUS_CONNECTION_REFUSED Failed to connect with SMB1 -- no workgroup available
连接同事的共享服务时报错:smbclient -L ip-U userWARNING: The "syslog" option is deprecatedEnter WORKGROUP\administrator's password: Sharename Type Comment --------- ---- ----...
2020-03-12 11:18:21
3249
原创 c语言实现收集Linux的syslog
以只读的方式打开syslog文件,定时收集,并将日志输出到终端#include <stdio.h>#include <stdlib.h>#include <errno.h>#include <string.h>#include <time.h>#include <sys/stat.h>#define OS...
2019-11-28 10:35:15
193
原创 wazuh与clamav 联动
第一步安装 clamav本次测试使用的是Ubuntu 14.04.6 LTS 系统,直接使用二进制包安装apt-get install clamavapt-get install clamav-daemonapt-get install libclamunrar6注意:wazuh支持收集很多日志,比如syslog,clamav自己会写日志到/var/log/cla...
2019-11-21 14:39:09
604
原创 wazuh 收集 suricata eve.json日志
安装suricata和规则 (源码或者安装包),本博客提供安装包操作方式:切换成超级用户进行操作yum -y install epel-release wget jqcurl -O https://copr.fedorainfracloud.org/coprs/jasonish/suricata-stable/repo/epel-7/jasonish-suricata-stable-e...
2019-11-19 17:03:24
1346
原创 osquery 源码分析之processes
osquery的代码风格很好, processes的基本实现原理可以通过以下链接查看https://github.com/osquery/osquery/blob/master/specs/processes.table里面有表名、schema (表结构)、实现方式、使用方式 (sql语句)。我们通过上面提供的实现方式来看代码:implementation("system/proc...
2019-11-13 17:12:18
235
原创 procps 获取进程信息
最近在使用wazuh时,发现在收集agent端的进程信息的时候,使用了一个第三方库 procps来处理/proc下面的信息的。使用方式1:调用openproc进行初始化,设置需要收集的信息标志;创建PROCTAB对象;2:调用readproc循环读取数据,每次遍历需要调用freeproc释放资源;3:最后调用closeproc,也是释放资源比如关闭打开的目录;看一下 w...
2019-11-13 12:39:08
342
原创 wazuh 原理分析之Syscollector 系统信息收集工作流程
wazuh是从ossec-hids衍生过来的,部分架构设计有所不同, 多进程多线程模式。本机的进程之间通过Unix domain socket 进行通信的。今天简单介绍一下数据搜集的相关功能的实现(Linux系统)。注意由于篇幅所限, 在函数中我们只列出相关代码。可以先看一下官网的架构设计https://documentation.wazuh.com/3.9/getting-...
2019-11-07 17:20:31
923
原创 Linux 线程私有数据 测试用例
线程私有数据可以用来存储线程本地的信息,tcmalloc就是用了该机制来减少锁的开销,加快内存分配。下面给出了一个测试用例通过pthread_key_create创建一个线程私有数据的key,并设置这个key对应私有数据的释放函数;调用pthread_setspecific将key和私有数据进行关联;可以调用pthread_getspecific进行获取私有数据。#include ...
2019-11-01 19:12:35
56
原创 wazuh agent 认证
wazuh 是一款hids, c/s架构, agent 要连上manager,需要进行认证。认证的方式有多种,下面提供一种比较简单的方式来处理:在agent端使用agent-auth来进行认证获取agent key查看帮助信息/var/ossec/bin/agent-auth -h使用方式/var/ossec/bin/agent-auth -m manager_ip...
2019-10-31 15:03:07
501
原创 Makefile 定义函数 foreach
Makefile 自定义函数 和 foreach的使用。最近在做项目时,用到了一些开源的组件,这些组件中需要第三方库,每个版本对应的第三方库可能不一样,所以使用源码编译安装时,第一次需要去下载这些包,但是下载比较慢,需要改造Makefile。Makefile 定义函数来实现这个改造函数格式define EXTERNAL_TAR ...endef调用deps...
2019-10-30 17:15:04
61
原创 chdir 切换工作目录
chdir 执行成功后,程序就可以切换工作目录,可以与chroot结合起来用,进行隔离。上代码:#include <unistd.h>#include <pwd.h>#include <stdio.h>int main(int argc, char *argv[]) { char * path = "/home/jack"; i...
2019-10-24 13:47:12
110
原创 关于 /proc/pid/net/unix
进程的/proc/$pid/fd 目录下存放了此进程所有打开的fd。如果想查看某个进程打开的socket的详细信息,可以通过inode进行关联。网络连接的关联可以参考https://blog.csdn.net/lkkey80/article/details/16856063本文讲解的是Unix的关联,也是通过inode。inode :34249, pid 3080上图...
2019-10-11 18:11:43
592
原创 sqlite 查询和导出表结构
查询指定表结构:PRAGMA TABLE_INFO (process_open_sockets)所有表结构:.schema
2019-10-10 17:55:26
49
原创 cat: /proc/22657/ns/net: Invalid argument
这个错误是读取文件的方式不对使用 ls -alth 查看详情是一个链接,可以使用readlink 命令读取之;类似的还有也可以使用readlink函数进行读取man 2 readlink 查看使用方式下面给个例子#include<unistd.h>#include<stdio.h>#include<stdlib.h...
2019-10-09 17:37:27
238
原创 Linux 遍历读取/proc目录下的pid文件夹
#include <dirent.h>#include <string.h>#include <stdio.h>#include <stdlib.h>int main() { DIR *dp; struct dirent *entry; dp = opendir("/proc"); if (dp) { ...
2019-10-08 19:58:00
238
2
原创 gdb 断点调试 设置条件
在阅读osquery代码时,通过source insight寻找调用流程时(processes),找不到它的上一级调用函数。打算用gdb来查看调用堆栈。在调试的过程中。启动的方式是gdb /usr/bin/osqueryi在genProcesses打断点还是没有头绪。在初始化的时候进行设置断点发现并没有在设置的条件下面断点。后面改用以下方式设置断点...
2019-09-19 15:26:25
202
原创 Diamorphine rootkit的特性与原理分析
仅作LKM rootkit研究之用,滥用后果自负。Diamorphine 是一个Linux内核模块, 支持内核版本 2.6.x/3.x/4.x。可通过 uname -r 查看内核版本。特性:当加载的时候, 模块是不可见的(lsmod 看不到); 通过发送31信号,可以达到隐藏和不隐藏进程的目的; 通过发送63信号,可以隐藏和不隐藏该内核模块; 通过发送64信号(给任何进程),可以...
2019-09-12 15:34:38
366
原创 strace 对auditd监控的系统调用syscall性能分析
编写测试程序,内部调用系统调用,或者比较简单的方式,对sshd进程进行性能分析。采用第二种方式进行分析:找到要监控性能的进程的pid;不开启auditd监控规则, 使用strace开始测试启动检测sudo strace -c -p 7344上传文件linux_kernel_2-6-11-12_comment.tar.bz2上传完毕, ctrl +c 终止。...
2019-08-26 18:30:47
258
原创 centos7.6 安装java之后,还是无法使用javac命令。报错提示:
sudo yum-yinstalljava-1.8.0-openjdk执行configure还是报错, javac 没有sudoyum install java-devel./configure成功
2019-08-14 18:16:21
637
原创 linux pgrep命令获取shell终端PID
pgrep 获取进程的pid功能类似于 ps -ef|grep process_name例如:pgrep bash 与ps -ef|grep bash下面给出另一种方式把所有shell的euid 获取到pgrep "^(echo $(cat /etc/shells | tr '/' ' ' | awk 'NF{print $NF}' | tr '\n' '|'))$...
2019-08-12 19:03:32
520
原创 linux rename使用
最近要对rename (系统调用号 82) 系统调用进行审计,使用mv 没有对应的信息产生,最后选择rename来实现。man rename使用方式是:例如需要把test100 改成test1rename test100 test1 test100上面就会执行 rename 系统调用如果开启了 auditd 审计,就会有如下信息:type=SYSCA...
2019-08-09 16:10:57
5427
1
userspace-rcu.rar
2019-08-08
tokyo cabinet 源码
2017-01-20
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人 TA的粉丝