Najbardziej zaawansowana aplikacja do ochrony cybernetycznej dla Androida - Bitdefender Mobile Security & Antivirus

Pobierz

21 maja 2019

Przegląd Integracji

CEF (Common Event Format (Wspólny Format Zdarzeń)) jest rozciągliwym, bazującym na tekście formatem używanym przez zarządzanie dziennikiem. Bitdefender GravityZone jest teraz w stanie dostarczać alerty używając standardu CEF poprzez integrację z Twoim ESM.

W tym przykładzie standardowej integracji z CEF, komunikacja pomiędzy GravityZone i ESM jest zrobiona przez Node.js Connector. Złącze to używa metody POST, aby odbierać uwierzytelnione żądania z GravityZone Event Push Service API. Żądania są analizowane, a następnie przekazywane dalej do lokalnego, zdalnego serwera Syslog.

Warunki wstępne

– Serwer Ubuntu 16.04

– Zainstalowany Node.js w wersji 8.1.x lub nowszy

Wiadomość HTTP

Event Push Service Request Header

Authorization: {authorization_string}

Event Push Service Payload

{
"cef": "0",
"events": [
"CEF:0|Bitdefender|GravityZone|6.4.0-8|70000|Registration"3"BitdefenderGZModule=registration
dvchost=TEST_ENDPOINTasdad BitdefenderGZComputerFQDN=testendpoint.dsd.ro dvc=10.10.18.227 ",
"CEF:0|Bitdefender|GravityZone|6.4.0-8|35|Product Modules
Status|5|BitdefenderGZModule=modules dvchost=TEST_ENDPOINTasdad
BitdefenderGZComputerFQDN-test-endpoint.dsd.ro dvc=10.10.18.227
",
"CEF:0|Bitdefender|GravityZone|6.4.0-8|35|Product Modules
Status|5|BitdefenderGZModule=modules dvchost=TEST_ENDPOINTasdad
BitdefenderGZComputerFQDN=test-endpoint.dsd.ro dvc=10.10.18.227 "
]
}

Tworzenie Złącza Node.js

Aby zbudować Złącze Node.js, podążaj za tymi krokami:

Krok 1: Utwórz folder dla złącza.

Utwórz katalog na swoim serwerze, na którym chciałbyś umieścić aplikację.

Krok 2: Utwórz plik package.json

Utwórz nowy plik nazwany package.json w następujący sposób:

{
"name": "app-name",
"version": "1.0.0",
"description": "client that will be able to receive authenticated POST
request and write each row in the local or remote syslog",
"main": "server.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "MIT",
"dependencies": {
}
}

Krok 3: Sprowadź zależności

– Express framework

Express jest minimalną i elastyczną strukturą aplikacji WWW Node.js, która zapewnia solidny zestaw funkcji dla aplikacji internetowych, oraz mobilnych.

Użyj Express, aby utworzyć serwer http, a następnie wprowadź następujące polecenie, aby umieścić go w pliku package.json:

$ npm install express --save

– Analizator składniowy body

Postępuj zgodnie z instrukcjami oprogramowania pośredniego analizowania treści body Node.js, aby przeanalizować przychodzące żądania body w oprogramowaniu pośrednim przed procedurami obsługi dostępnymi pod właściwością req.body.

$ npm install body-parser --save

– Klient Syslog

Postępuj zgodnie z instrukcjami modułu klienta Syslog, aby wysyłać powiadomienia o zdarzeniach w sieciach.

$ npm install syslog-client --save

Krok 4: Utwórz plik config.json

Plik ten zawiera informacje konfiguracyjne używane podczas uruchamiania server.js. Użyj następującej ścieżki w celu konfiguracji pliku:

APP_ROUTE/api/config

Zmienne plików:

authentication_string : używane w server.js w celu sprawdzania poprawności wartości z req.headers.autgorization

target : adres IP Twojego klienta syslog.

transport : poprawne wartości dla transportu (TCP/UDP), używane również do konfigurowania klienta syslog.

syslog_port ​: port TCP, lub UDP do wysyłania wiadomości.

port 3200 : Start serwera na porcie 3200

Przykład:

{
"port": 3200,
"syslog_port": 515,
"transport": "Tcp",
"target": "10.17.23.68",
"authentication_string": "Basic dGVzdDp0ZXN0"
}

Krok 5: Utwórz plik server.js

Wymagane zależności aplikacji:

server.js
// Wymaga express'a i utworzenia jego instancji
const express = require('express');
const app = express();
Require node File System module
const fs = require('fs');
// Wymaga analizatora body i utworzenia instancji json analizatora tekstu
const bodyParser = require('body-parser');
const textParser = bodyParser.json();
// Wymaga epsSyslogHelper -> ta część będzie wyjaśniona poniżej
const epsSyslogHelper = require('./api/epsSyslogHelper');

 

1. Wczytaj plik konfiguracyjny. Ścieżka pliku konfiguracyjnego jest odbierana jako parametr na uruchomionym serwerze węzłowym.

node server.js {ścieżka dla pliku konfiguracji}

server.js
if (!process.argv[2]) {
 throw "Missing input file parameter";
}
let configPath = process.argv[2];
const config = JSON.parse(fs.readFileSync(configPath, 'utf8'));

2. Sprawdź req.header.authorization

Jeśli autoryzacyjny łańcuch znaków jest taki sam jak z twojego pliku konfiguracyjnego, kontynuuj. W przeciwnym razie wpisz not return, aby zatrzymać wykonywanie

3.

server.js
// użyj podstawowej autoryzacji HTTP do zabezpieczenia interfejsu api
app.use('/api', (req, res, next) => {
 console.log(req.headers.authorization);
 // sprawdź podstawowy nagłówek autoryzacji
 if (!req.headers.authorization) {
 return res.status(401).json({ message: 'Missing Authorization
Header' });
 }
 // zweryfikuj poświadczenia autoryzacji
 const authorizationString = req.headers.authorization;
 if (config.authentication_string !== authorizationString) {
 return res.status(401).json({ message: 'Invalid Authentication
Credentials' });
 }
 next();
});

4. Dodaj trasę, która odpowiada na żądanie przychodzące z inrfejsu Event Push Service API. Zaktualizuj body i zaloguj się za pomocą epsSyslogHelper.js

server.js
// url: http://{server_url}:{port}/api/
app.post('/api', textParser, (request, response) => {
 const body = request.body;
 let syslogHelper = new epsSyslogHelper(config);
 syslogHelper.log(body);
 response.sendStatus(200);
});

5. Ustaw serwer w tryb nasłuchiwania na porcie skonfigurowanym w pliku config.json:

app.listen(config.port, () => console.log(`Listening on port
${config.port}`));

Krok 6: Stwórz plik epsSyslogHelpers.js

Wymagane zależności aplikacji:

1. Włącz serwer Klienta bazujący na pliku konfiguracyjnym.

epsSyslogHelper.js
/**
* EventConverter class
*/
EpsSyslogHelper = function (config) {
 let hostName = os.hostname();
 if (!hostName) {
 hostName = 'localhost';
 }
 let dot = hostName.indexOf('.');
 if (dot > 0) {
 hostName = hostName.substring(0, dot);
 }
 console.log('Logging using host name %s', hostName);
 this._client = syslog.createClient(config.target, {
 syslogHostname: hostName,
 port: config.syslog_port,
 transport: syslog.Transport[config.transport],
 });
 this._client.on('error', function(err) {
 console.error('Error from syslog network: %s', err);
 });
};

2. Zaktualizuj wiadomość, oraz dziennik zdarzeń.

epsSyslogHelper.js
EpsSyslogHelper.prototype.log = function _log(msg) {
 let options = {
 facility: syslog.Facility.Local0,
 severity: syslog.Severity.Informational
 };
 let events;
 if(msg.hasOwnProperty('cef')){
 //events = msg.params.events;
 events = msg.events;
 }
 if(events){
 for(let eventKey in events) {
 let syslogMessage = events[eventKey];
 if(typeof syslogMessage !== 'string') {
 syslogMessage = JSON.stringify(syslogMessage);
 }
 console.log("Event key = " + eventKey + " is = " +
syslogMessage);
 this._client.log(syslogMessage, options, function (err) {
 if (err) {
 console.log(err);
 } else {
 console.log('Sent to syslog')
 }
 });
 }
 }
};

Krok 7: Włącz serwer węzłowy

Aby włączyć używając pliku konfiguracyjnego wpisz następujące polecenie:

node server.js {ścieżka_do_pilku_konfiguracyjnego} (w tym wypadku
api/config/config.json)

Źródło: https://www.bitdefender.com/support/building-an-event-push-service-api-connector-for-cef-standard-2373.html 

Dane kontaktowe:

Sklep internetowy

sklep@bitdefender.pl

Pomoc techniczna

pomoc@bitdefender.pl

Marketing

promocje@marken.com.pl

Centrala

kontakt@marken.com.pl

    Formularz kontaktowy

    Wybierz odpowiednią opcję aby przejść do formularza kontaktowego. Odpowiemy najszybciej jak to możliwe!

    klient-indywidualnyklient-biznesowyreseller

    Dane kontaktowe




    stalynowy