diff --git a/microscript/ILibDuktape_Polyfills.c b/microscript/ILibDuktape_Polyfills.c index c3a5659..e27f131 100644 --- a/microscript/ILibDuktape_Polyfills.c +++ b/microscript/ILibDuktape_Polyfills.c @@ -2494,7 +2494,7 @@ void ILibDuktape_Polyfills_JS_Init(duk_context *ctx) duk_peval_string_noresult(ctx, "addCompressedModule('util-language', Buffer.from('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', 'base64'));"); // agent-instaler: Refer to modules/agent-installer.js - duk_peval_string_noresult(ctx, "addCompressedModule('agent-installer', Buffer.from('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', 'base64'), '2022-06-03T02:09:46.000-07:00');"); + duk_peval_string_noresult(ctx, "addCompressedModule('agent-installer', Buffer.from('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', 'base64'), '2022-06-07T12:51:13.000-07:00');"); // file-search: Refer to modules/file-search.js duk_peval_string_noresult(ctx, "addCompressedModule('file-search', Buffer.from('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', 'base64'));"); diff --git a/modules/agent-installer.js b/modules/agent-installer.js index 60e0a1c..f2daccb 100644 --- a/modules/agent-installer.js +++ b/modules/agent-installer.js @@ -79,7 +79,6 @@ Object.defineProperty(Array.prototype, 'getParameterValue', function checkParameters(parms) { var msh = _MSH(); - if (parms.getParameter('description', null) == null && msh.description != null) { parms.push('--description="' + msh.description + '"'); } if (parms.getParameter('displayName', null) == null && msh.displayName != null) { parms.push('--displayName="' + msh.displayName + '"'); } if (parms.getParameter('companyName', null) == null && msh.companyName != null) { parms.push('--companyName="' + msh.companyName + '"'); } @@ -287,7 +286,10 @@ function installService(params) } if (process.platform == 'win32') { svc.close(); } - process.exit(); + if (parseInt(params.getParameter('__skipExit', 0)) == 0) + { + process.exit(); + } } function uninstallService3(params) diff --git a/test/update-test.js b/test/update-test.js index 6a4d0af..d37deeb 100644 --- a/test/update-test.js +++ b/test/update-test.js @@ -15,6 +15,24 @@ See the License for the specific language governing permissions and limitations under the License. */ +const MeshCommand_AuthRequest = 1; // Server web certificate public key sha384 hash + agent or server nonce +const MeshCommand_AuthVerify = 2; // Agent or server signature +const MeshCommand_AuthInfo = 3; // Agent information +const MeshCommand_AuthConfirm = 4; // Server confirm to the agent that is it authenticated +const MeshCommand_ServerId = 5; // Optional, agent sends the expected serverid to the server. Useful if the server has many server certificates. +const MeshCommand_CoreModule = 10; // New core modules to be used instead of the old one, if empty, remove the core module +const MeshCommand_CompressedCoreModule = 20; +const MeshCommand_CoreModuleHash = 11; // Request/return the SHA384 hash of the core module +const MeshCommand_AgentCommitDate = 30; // Commit Date that the agent was built with +const MeshCommand_AgentHash = 12; // Request/return the SHA384 hash of the agent executable +const MeshCommand_AgentUpdate = 13; // Indicate the start and end of the mesh agent binary transfer +const MeshCommand_AgentUpdateBlock = 14; // Part of the mesh agent sent from the server to the agent, confirmation/flowcontrol from agent to server +const MeshCommand_AgentTag = 15; // Send the mesh agent tag to the server +const MeshCommand_CoreOk = 16; // Sent by the server to indicate the meshcore is ok +const MeshCommand_HostInfo = 31; // Host OS and CPU Architecture + +const PLATFORMS = ['UNKNOWN', 'DESKTOP', 'LAPTOP', 'MOBILE', 'SERVER', 'DISK', 'ROUTER', 'PI', 'VIRTUAL']; + process.stdout.write('Generating Certificate...'); var cert = require('tls').generateCertificate('test', { certType: 2, noUsages: 1 }); var server = require('https').createServer({ pfx: cert, passphrase: 'test' }); @@ -24,28 +42,19 @@ process.stdout.write('\rGenerating Certificate... [DONE]\n'); var loadedCert = require('tls').loadCertificate({ pfx: cert, passphrase: 'test' }); var der = loadedCert.toDER(); - -var tmp = require('tls').loadCertificate({ der: der }); -console.log('DER: ' + tmp.getKeyHash().toString('hex')); - -console.log('DER/LEN: ' + der.length); -console.log('Certificate Digest = ' + cert.digest.split(':').join('')); -console.log('Certificate Fingerprint = ' + loadedCert.getKeyHash().toString('hex')); global._test = []; +require('clipboard')(loadedCert.getKeyHash().toString('hex')); +console.log('Certificate Fingerprint saved to clipboard...'); + server.on('connection', function (c) { global._test.push(c); - console.log('inbound connection'); + console.info1('inbound connection received'); }); -server.on('request', function (imsg, response) -{ - console.log(imsg); -}); - server.on('upgrade', function (msg, sck, head) { - console.log('upgrade'); + console.info1('upgrade requested'); global._client = sck.upgradeWebSocket(); global._client.on('data', function (buffer) { @@ -53,19 +62,25 @@ server.on('upgrade', function (msg, sck, head) }); global._client.processCommand = function processCommand(buffer) { + if (buffer[0] == '{') + { + // JSON Command + this.processJSON(JSON.parse(buffer.toString())); + return; + } var cmd = buffer.readUInt16BE(0); switch(cmd) { - case 30: // Agent Commit Date + case MeshCommand_AgentCommitDate: // Agent Commit Date console.log("Connected Agent's Commit Date: " + buffer.slice(2).toString()); break; - case 31: + case MeshCommand_HostInfo: console.log("Connected Agent Info: " + buffer.slice(2).toString()); break; - case 5: - console.log("Connected Agent's ServerID: " + buffer.slice(2).toString('hex')); + case MeshCommand_ServerId: + console.info1("Connected Agent's ServerID: " + buffer.slice(2).toString('hex')); break; - case 1: + case MeshCommand_AuthRequest: //typedef struct MeshCommand_BinaryPacket_AuthRequest //{ // unsigned short command; @@ -76,8 +91,8 @@ server.on('upgrade', function (msg, sck, head) this.agentNonce = Buffer.alloc(48); buffer.slice(50, 98).copy(this.agentNonce); - console.log('Agent Sent Nonce: ' + this.agentNonce); - console.log('Agent Sent ServerID: ' + serverHash); + console.info1('Agent Sent Nonce: ' + this.agentNonce.toString('hex')); + console.info1('Agent Sent ServerID: ' + serverHash); this.serverNonce = Buffer.alloc(48); this.serverNonce.randomFill(); @@ -89,8 +104,8 @@ server.on('upgrade', function (msg, sck, head) this.write(authBuffer); break; - case 2: - console.log('AUTH-VERIFY'); + case MeshCommand_AuthVerify: + console.info1('AUTH-VERIFY'); var hash = require('SHA384Stream').create(); hash.on('hash', function (h) @@ -105,10 +120,10 @@ server.on('upgrade', function (msg, sck, head) hash.end(); - console.log('SERVER/SIGN => ' + y.toString('hex'), y.length); - console.log('SERVER/SIGN/AgentNonce => ' + this.agentNonce.toString('hex'), this.agentNonce.length); - console.log('SERVER/SIGN/ServerNonce => ' + this.serverNonce.toString('hex'), this.serverNonce.length); - console.log('SERVER/SIGN/RESULT => ' + hash._hashedValue.toString('hex')); + console.info1('SERVER/SIGN => ' + y.toString('hex'), y.length); + console.info1('SERVER/SIGN/AgentNonce => ' + this.agentNonce.toString('hex'), this.agentNonce.length); + console.info1('SERVER/SIGN/ServerNonce => ' + this.serverNonce.toString('hex'), this.serverNonce.length); + console.info1('SERVER/SIGN/RESULT => ' + hash._hashedValue.toString('hex')); var RSA = require('RSA'); var signature = RSA.sign(RSA.TYPES.SHA384, loadedCert, hash._hashedValue); @@ -118,28 +133,186 @@ server.on('upgrade', function (msg, sck, head) der.copy(verifyBuffer, 4); // CERT signature.copy(verifyBuffer, 4 + der.length); - var v = RSA.verify(RSA.TYPES.SHA384, loadedCert, hash._hashedValue, signature); - console.log('VERIFIED: ' + v); - - - var zmp = require('tls').loadCertificate({ der: verifyBuffer.slice(4, verifyBuffer.readUInt16BE(2) + 4) }); - console.log('SENDING: ' + verifyBuffer.slice(4, verifyBuffer.readUInt16BE(2) + 4).toString('hex')); - this.write(verifyBuffer); break; + case MeshCommand_AuthInfo: + //typedef struct MeshCommand_BinaryPacket_AuthInfo + //{ + // unsigned short command; + // unsigned int infoVersion; + // unsigned int agentId; + // unsigned int agentVersion; + // unsigned int platformType; + // char MeshID[UTIL_SHA384_HASHSIZE]; + // unsigned int capabilities; + // unsigned short hostnameLen; + // char hostname[]; + //}MeshCommand_BinaryPacket_AuthInfo; + + var agentID = buffer.readUInt32BE(6); + var platformType = buffer.readUInt32BE(14); + var hostname = buffer.slice(72); + + console.log('AgentID: ' + getSystemName(agentID)); + try + { + console.log('PlaformType: ' + PLATFORMS[platformType]); + } + catch(zz) + { + } + console.log('Hostname: ' + hostname); + + // Send AuthConfirm + var b = Buffer.alloc(4); + b.writeUInt16BE(MeshCommand_AuthConfirm); + b.writeUInt16BE(1, 2); + this.write(b); + + // Ask for Agent Hash + var b = Buffer.alloc(4); + b.writeUInt16BE(MeshCommand_AgentHash); + b.writeUInt16BE(1, 2); + this.write(b); + + // Ask for Module Hash + var b = Buffer.alloc(4); + b.writeUInt16BE(MeshCommand_CoreModuleHash); + b.writeUInt16BE(1, 2); + this.write(b); + break; + case MeshCommand_AgentTag: + console.log('AgentTag: ' + buffer.slice(4)); + break; + case MeshCommand_AgentHash: + var hash = buffer.slice(4).toString('hex'); + console.log('AgentHash=' + hash); + break; + case MeshCommand_CoreModuleHash: + var hash = buffer.slice(4).toString('hex'); + console.log('CoreModuleHash=' + hash); + break; default: console.log('Command: ' + cmd); break; } }; + global._client.processJSON = function processJSON(j) + { + console.info1(JSON.stringify(j, null, 1)); + } }); +function getSystemName(id) +{ + var ret = 'unknown'; + switch(id) + { + default: + ret = 'ARCHID=' + id; + break; + case 1: + ret = 'Windows Console 32 bit'; + break; + case 2: + ret = 'Windows Console 64 bit'; + break; + case 3: + ret = 'Windows Service 32 bit'; + break; + case 4: + ret = 'Windows Service 64 bit'; + break; + case 16: + ret = 'macOS Intel Silicon 64 bit'; + break; + case 29: + ret = 'macOS Apple Silicon 64 bit'; + break; + case 5: + ret = 'Linux x86 32 bit'; + break; + case 6: + ret = 'Linux x86 64 bit'; + break; + case 7: + ret = 'Linux MIPSEL'; + break; + case 9: + ret = 'Linux ARM 32 bit'; + break; + case 13: + ret = 'Linux ARM 32 bit PogoPlug'; + break; + case 15: + ret = 'Linux x86 32 bit POKY'; + break; + case 18: + ret = 'Linux x86 64 bit POKY'; + break; + case 19: + ret = 'Linux x86 32 bit NOKVM'; + break; + case 20: + ret = 'Linux x86 64 bit NOKVM'; + break; + case 24: + ret = 'Linux ARM/HF 32 bit (Linaro)'; + break; + case 26: + ret = 'Linux ARM 64 bit'; + break; + case 32: + ret = 'Linux ARM 64 bit (glibc/2.24)'; + break; + case 27: + ret = 'Linux ARM/HF 32 bit NOKVM'; + break; + case 30: + ret = 'FreeBSD x86 64 bit'; + break; + case 31: + ret = 'FreeBSD x86 32 bit'; + break; + case 37: + ret = 'OpenBSD x86 64 bit'; + break; + case 33: + ret = 'Alpine Linux x86 64 bit (MUSL)'; + break; + case 25: + ret = 'Linux ARM/HF 32 bit'; + break; + case 28: + ret = 'Linux MIPS24KC/MUSL (OpenWRT)'; + break; + case 36: + ret = 'Linux x86/MUSL 64 bit (OpenWRT)'; + break; + case 40: + ret = 'Linux MIPSEL24KC/MUSL (OpenWRT)'; + break; + case 41: + ret = 'Linux ARMADA/CORTEX-A53/MUSL (OpenWRT)'; + break; + case 35: + ret = 'Linux ARMADA370/HF'; + break; + } + return (ret); +} - - +// +// Start by installing agent as service +// +var params = ['--__skipExit=1', '--MeshID=0x43FEF862BF941B2BBE5964CC7CA02573BBFB94D5A717C5AA3FC103558347D0BE26840ACBD30FFF981F7F5A2083D0DABC', '--MeshServer=wss://127.0.0.1:9250/agent.ashx', '--meshServiceName=TestAgent', '--ServerID=' + loadedCert.getKeyHash().toString('hex')]; +var paramsString = JSON.stringify(params); +require('agent-installer').fullInstall(paramsString); +console.setDestination(console.Destinations.STDOUT); +console.log('\nWaiting for Agent Connection...');