【Day 13】- 有了这个,就没有打得开的程序了 XD(SetCreateProcessNotifyRoutine)

Agenda

  • 资安宣言
  • 测试环境与工具
  • 技术原理
  • References
  • 下期预告

资安宣言


撰写本系列文章目的在於提升资讯安全之实务能力,
并透过实作体悟到资讯安全领域的重要性,
本系列所有文章之内容皆有一定技术水平,
不得从事非法行为、恶意攻击等非法活动,
「一切不合法规之行为皆受法律所约束」,
为了避免造成公司、厂商或玩家之间困扰,
所有实作不会拿已上市产品、Online Game 等等来作范例学习,
且部分具有深度、价值之内容,将会提升一定阅读门槛(不对该技术做分析、解说),
请勿透过本系列文章所学,从事任何非法活动,请不要以身试法!!!


测试环境与工具

技术原理

首先开始前要先说一下,
小弟我目前还属於菜鸟阶段,正不断努力学习中,
若有发现错误或不妥之处还请不吝赐教。
欢迎大家多多留言,互相交流交流。

那就开始今天的主题吧~~
/images/emoticon/emoticon11.gif

大家一定都知道防毒软件会监控 Process 的新建,
假设发现恶意(黑名单)的 Process 就不能让它跑起来,
想要实现这样的技术有几个方法:

  1. Hook 某些 Func(Kernl mode 不好处理)
  2. SetCreateProcessNotifyRoutine

我们今天就要来来谈谈:CreateProcessNotifyRoutine

在 Kernel 中有个东西叫做 PsSetCreateProcessNotifyRoutineEx
我们来看看它在 MSDN 中写的资讯:

NTSTATUS PsSetCreateProcessNotifyRoutineEx(
  PCREATE_PROCESS_NOTIFY_ROUTINE_EX NotifyRoutine,
  BOOLEAN                           Remove
);

当一个 Process 正要跑起来却还没跑起来与要结束的时候,
系统都会 CALL 指向 PCREATE_PROCESS_NOTIFY_ROUTINE_EX 的这个 NotifyRoutine Func,
第二个 Remove 参数是指定要设置还是要移除这个 NotifyRoutine Func。

我们来看看 PCREATE_PROCESS_NOTIFY_ROUTINE_EXMSDN 中的资讯:

PCREATE_PROCESS_NOTIFY_ROUTINE_EX PcreateProcessNotifyRoutineEx;

void PcreateProcessNotifyRoutineEx(
  PEPROCESS Process,
  HANDLE ProcessId,
  PPS_CREATE_NOTIFY_INFO CreateInfo
)
{...}

当一个 Process 正要跑起来却还没跑起来与要结束的时候,
这个 Func 会收到系统给的 EProcess、ProcessID 与 CreateInfo,
当 Process 正在退出,CreateInfo 为 NULL。

我们来看看 PPS_CREATE_NOTIFY_INFOMSDN 中的资讯:

typedef struct _PS_CREATE_NOTIFY_INFO {
  SIZE_T              Size;
  union {
    ULONG Flags;
    struct {
      ULONG FileOpenNameAvailable : 1;
      ULONG IsSubsystemProcess : 1;
      ULONG Reserved : 30;
    };
  };
  HANDLE              ParentProcessId;
  CLIENT_ID           CreatingThreadId;
  struct _FILE_OBJECT *FileObject;
  PCUNICODE_STRING    ImageFileName;
  PCUNICODE_STRING    CommandLine;
  NTSTATUS            CreationStatus;
} PS_CREATE_NOTIFY_INFO, *PPS_CREATE_NOTIFY_INFO;

um... 有点多呢...

讲这次实作的重点就好:CreationStatus
CreationStatus 这个是这次操作要返回的 NTSTATUS Values,
这个 NTSTATUS Values 可以决定这次操作的成功与否。

所以~\(0^◇^0)/
把它改成:STATUS_ACCESS_DENIED !!!
这样 Process 就无法启动拉~~~

来看个效果图:

哈哈哈 成功!
/images/emoticon/emoticon01.gif

在 ARK 工具中可以看到:

但是这样不就会被发现了吗??
有没有什麽办法不要让它弹出对话框?
把它改成:STATUS_ACCESS_DISABLED_NO_SAFER_UI_BY_POLICY
这样就不会有对话框出现惹。

NTSTATUS Values 还可以填什麽?
这里有一大堆:NTSTATUS Values

编译提示:

  1. 要使用 PsSetCreateProcessNotifyRoutineEx 需要为 Driver 签上数位签章
  2. 要在命令列加上 /INTEGRITYCHECK
  3. 开测试模式、停用数位签章检查,就可以载入这个没有签章的 Driver
  4. ...
  5. ... ...

这个实作网路上满多范例的~~可以搜寻看看或许可以找到能用的?XD

最後,
这次铁人赛所写的 Project 已在考虑是否要公开,
会在 Day 30 公布最後的决定... 敬请期待!!

好了,这篇就讲到这结束了,
大家若有发现哪里写得不好或错误的地方,都留个言讨论一下吧 XD
那我们下期见 o( ̄▽ ̄)ブ

References

下期预告


<<:  2.4.4 Design System - Button

>>:  Day 13: Monitor and Log with Google Cloud Operations Suite: Challenge Lab

在我的 iMac 上制作双系统的随身碟

用同一个硬碟外接盒,分别在不同的硬碟安装上 Windows 10 与 Clear Linux,在使用...

第 26 型 - 路由 (Router)

利用 Angualr 框架开发单一应用程序 (Single-Page Application, SP...

群辉ds920+nas网路储存设备简易开箱,满足家庭影音需求

Synology DS920+nas网路储存设备 是一款适合家庭使用的 4 盘位 NAS。除了拥有4...

【从零开始的Swift开发心路历程-Day25】天气预报App实作Part4(完)

昨天我们已经能成功选择天气预报想查看的地点和时间了 App上的资讯也会随着UIPickerView的...

Day 09:一起了解 Angular 应用程序的启动流程(一)

启动 Angular 开发服务器 我们先打开 VS Code 的终端机面版,输入 npm start...