add Defender for Windows Server (#5646)

Signed-off-by: si458 <simonsmith5521@gmail.com>

Simon Smith committed Jan 4, 2024 at 02:16 UTC f33dbd31e52c0980747ed058db83c884e45aede8
5 files changed +47 -2
agents/meshcore.js
+8
@@ -5623,6 +5623,14 @@ function sendPeriodicServerUpdate(flags, force) {
5623 });
5624 } catch (ex) { }
5625 }
5626 + // Get Defender for Windows Server
5627 + try {
5628 + var d = require('win-info').defender();
5629 + d.then(function(res){
5630 + meshCoreObj.defender = res;
5631 + meshCoreObjChanged();
5632 + });
5633 + } catch (ex){ }
5634 }
5635
5636 // Send available data right now
agents/modules_meshcore/win-info.js
+19 -2
@@ -239,12 +239,29 @@ function installedApps()
239 return (ret);
240 }
241
242 +function defender(){
243 + var promise = require('promise');
244 + var ret = new promise(function (a, r) { this._resolve = a; this._reject = r; });
245 + ret.child = require('child_process').execFile(process.env['windir'] + '\\System32\\WindowsPowerShell\\v1.0\\powershell.exe', ['powershell', '-noprofile', '-nologo', '-command', '-'], {});
246 + ret.child.promise = ret;
247 + ret.child.stdout.str = ''; ret.child.stdout.on('data', function (c) { this.str += c.toString(); });
248 + ret.child.stderr.str = ''; ret.child.stderr.on('data', function (c) { this.str += c.toString(); });
249 + ret.child.stdin.write('Get-MpComputerStatus | Select-Object RealTimeProtectionEnabled,IsTamperProtected | ConvertTo-JSON\r\n');
250 + ret.child.stdin.write('exit\r\n');
251 + ret.child.on('exit', function (c) {
252 + if (this.stdout.str == '') { this.promise._resolve({}); return; }
253 + var abc = JSON.parse(this.stdout.str.trim())
254 + this.promise._resolve({ RealTimeProtection: abc.RealTimeProtectionEnabled, TamperProtected: abc.IsTamperProtected });
255 + });
256 + return (ret);
257 +}
258 +
259 if (process.platform == 'win32')
260 {
244 - module.exports = { qfe: qfe, av: av, defrag: defrag, pendingReboot: pendingReboot, installedApps: installedApps };
261 + module.exports = { qfe: qfe, av: av, defrag: defrag, pendingReboot: pendingReboot, installedApps: installedApps, defender: defender };
262 }
263 else
264 {
265 var not_supported = function () { throw (process.platform + ' not supported'); };
249 - module.exports = { qfe: not_supported, av: not_supported, defrag: not_supported, pendingReboot: not_supported, installedApps: not_supported };
266 + module.exports = { qfe: not_supported, av: not_supported, defrag: not_supported, pendingReboot: not_supported, installedApps: not_supported, defender: not_supported };
267 }
\ No newline at end of file
meshagent.js
+4
@@ -1920,6 +1920,10 @@ module.exports.CreateMeshAgent = function (parent, db, ws, req, args, domain) {
1920 if (!device.wsc) { device.wsc = {}; }
1921 if (JSON.stringify(device.wsc) != JSON.stringify(command.wsc)) { /*changes.push('Windows Security Center status');*/ device.wsc = command.wsc; change = 1; log = 1; }
1922 }
1923 + if (command.defender != null) { // Defender For Windows Server
1924 + if (!device.defender) { device.defender = {}; }
1925 + if (JSON.stringify(device.defender) != JSON.stringify(command.defender)) { /*changes.push('Defender status');*/ device.defender = command.defender; change = 1; log = 1; }
1926 + }
1927
1928 // Push Messaging Token
1929 if ((command.pmt != null) && (typeof command.pmt == 'string') && (device.pmt != command.pmt)) {
views/default-mobile.handlebars
+8
@@ -5894,6 +5894,14 @@
5894 x += addDetailItem("Windows Security", y.join(', '));
5895 }
5896
5897 + // Defender for Windows Server
5898 + if(node.defender && !node.wsc) {
5899 + var y = [];
5900 + if (node.defender.RealTimeProtection != null) { if (node.defender.RealTimeProtection == true) { y.push("RealTimeProtection" + ' - <span style=color:green>' + "On" + '</span>'); } else { y.push("RealTimeProtection" + ' - <span style=color:red>' + "Off" + '</span>'); } }
5901 + if (node.defender.TamperProtected != null) { if (node.defender.TamperProtected == true) { y.push("TamperProtection" + ' - <span style=color:green>' + "On" + '</span>'); } else { y.push("TamperProtection" + ' - <span style=color:red>' + "Off" + '</span>'); } }
5902 + x += addDetailItem("Windows Defender", y.join(', '));
5903 + }
5904 +
5905 // Antivirus
5906 if (node.av && node.av.length > 0) {
5907 var y = [];
views/default.handlebars
+8
@@ -7396,6 +7396,14 @@
7396 x += addDeviceAttribute("Windows Security", y.join(', '));
7397 }
7398
7399 + // Defender for Windows Server
7400 + if(node.defender && !node.wsc) {
7401 + var y = [];
7402 + if (node.defender.RealTimeProtection != null) { if (node.defender.RealTimeProtection == true) { y.push("RealTimeProtection" + ' - <span style=color:green>' + "On" + '</span>'); } else { y.push("RealTimeProtection" + ' - <span style=color:red>' + "Off" + '</span>'); } }
7403 + if (node.defender.TamperProtected != null) { if (node.defender.TamperProtected == true) { y.push("TamperProtection" + ' - <span style=color:green>' + "On" + '</span>'); } else { y.push("TamperProtection" + ' - <span style=color:red>' + "Off" + '</span>'); } }
7404 + x += addDeviceAttribute("Windows Defender", y.join(', '));
7405 + }
7406 +
7407 // Antivirus
7408 if (node.av && node.av.length > 0) {
7409 var y = [];