45 Commits

Author SHA1 Message Date
7d98f47cba Merge pull request #66 from KasperskyLab/dev
Update install.sh with new checks
2021-03-25 16:14:43 +01:00
5e29f8c850 Update install.sh with new checks 2021-03-25 15:42:51 +01:00
1f0a9e8c68 Merge pull request #65 from KasperskyLab/dev
Adding Wi-Fi network priority
2021-03-25 15:05:12 +01:00
ceb36f81ae Adding Wi-Fi network priority #55 2021-03-25 15:01:58 +01:00
32e04398fe Update iocs.json 2021-03-25 13:48:54 +01:00
866f24bad8 Merge pull request #64 from KasperskyLab/main
Update of the dev branch with main (new) code
2021-03-25 10:30:16 +01:00
1c2d7033f0 Update install.sh
Adding Desktop directory check.
2021-03-25 10:10:36 +01:00
6d1a0d88e0 Merge pull request #63 from KasperskyLab/dev
Adding more translations and few fixes
2021-03-25 09:46:48 +01:00
f1250a00ba Merge pull request #62 from bl4ckh0l3z/main
Fix for JWT token generation and validation
2021-03-25 09:46:28 +01:00
208d408d37 Adding npm timeout for slow bandwidth 2021-03-24 19:03:48 +01:00
fadcee35db Adding more translations and few fixes 2021-03-24 14:37:20 +01:00
36833e1c6b Update main.py
ERROR in app: Exception on /api/get-token [GET]
Traceback (most recent call last):
  File "/usr/local/lib/python3.7/dist-packages/flask/app.py", line 2447, in wsgi_app
    response = self.full_dispatch_request()
  File "/usr/local/lib/python3.7/dist-packages/flask/app.py", line 1952, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/usr/local/lib/python3.7/dist-packages/flask/app.py", line 1821, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/usr/local/lib/python3.7/dist-packages/flask/_compat.py", line 39, in reraise
    raise value
  File "/usr/local/lib/python3.7/dist-packages/flask/app.py", line 1950, in full_dispatch_request
    rv = self.dispatch_request()
  File "/usr/local/lib/python3.7/dist-packages/flask/app.py", line 1936, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/usr/local/lib/python3.7/dist-packages/flask_httpauth.py", line 164, in decorated
    return f(*args, **kwargs)
  File "/usr/share/sauron/server/backend/main.py", line 37, in get_token
    return jsonify({"token": token.decode("utf8")})
AttributeError: 'str' object has no attribute 'decode'
2021-03-23 21:02:41 +01:00
2f232bbc15 Specify algorithm for jwt.decode
>>> jwt.decode(token, app.config["SECRET_KEY"])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.7/dist-packages/jwt/api_jwt.py", line 113, in decode
    decoded = self.decode_complete(jwt, key, algorithms, options, **kwargs)
  File "/usr/local/lib/python3.7/dist-packages/jwt/api_jwt.py", line 80, in decode_complete
    'It is required that you pass in a value for the "algorithms" argument when calling decode().'
jwt.exceptions.DecodeError: It is required that you pass in a value for the "algorithms" argument when calling decode().
2021-03-23 20:57:23 +01:00
a98679a923 Update whitelist.json 2021-03-11 20:40:05 +01:00
3ff29226b7 Merge pull request #60 from KasperskyLab/dev
Minor changes (loader link + iptables rule)
2021-03-11 10:26:21 +01:00
0d32a1d3c4 Minor changes (loader link + iptables rule) 2021-03-10 18:07:33 +01:00
6d5389370c Update iocs.json 2021-03-01 16:59:38 +01:00
6b29daad59 Update iocs.json 2021-03-01 16:52:31 +01:00
3bdac850b6 Merge pull request #58 from KasperskyLab/dev
Adding few features.
2021-02-26 14:28:16 +01:00
885d67afd0 Adding few seconds before internet check 2021-02-26 14:26:50 +01:00
6de9f4aabe Change icon button to home button 2021-02-26 14:10:09 +01:00
c3b48f278d Add back button 2021-02-26 13:47:57 +01:00
e4d63a7ef5 Preventing the analyzed device to reach TinyCheck 2021-02-26 13:25:10 +01:00
672b8cf0c1 Merge pull request #57 from KasperskyLab/dev
Update install.sh with new node version.
2021-02-26 12:20:26 +01:00
4488a52631 Update install.sh 2021-02-26 12:15:45 +01:00
92b89b78cf Merge pull request #56 from KasperskyLab/main
Update dev branch
2021-02-26 12:13:27 +01:00
22c7cf1119 Merge pull request #54 from KasperskyLab/update-feature
Update from GUI feature
2021-02-19 16:45:41 +01:00
9ad538862e Changing FR translation 2021-02-19 16:42:07 +01:00
ee1f89e45f Changes for prod 2021-02-19 16:40:52 +01:00
79f6c09cc9 Changes for tests 2021-02-19 16:18:32 +01:00
b0869a94c9 Updating install script 2021-02-19 15:49:47 +01:00
a5f84f35de Removing update-feature branch 2021-02-19 15:46:33 +01:00
0b64402f74 Deleting unused translation var 2021-02-19 15:32:58 +01:00
c8d667f5c5 Adding few stuff related to updates 2021-02-19 15:31:30 +01:00
dc37b6a2da Color changes 2021-02-19 14:38:16 +01:00
8890ed1b26 Changing timeout 2021-02-19 14:33:23 +01:00
6b6c9bb368 Changing timeout 2021-02-19 14:18:32 +01:00
7acc61d80d Adding version info 2021-02-19 14:08:14 +01:00
ecf1281290 Adding version info 2021-02-19 13:56:21 +01:00
6350241a35 Issue with API URL corrected. 2021-02-19 13:33:02 +01:00
8d64b3bc9a Some changes for the GUI 2021-02-19 13:20:18 +01:00
6790b17f86 Changes to get the current version 2021-02-19 10:57:11 +01:00
5a133d0d17 No new line in the VERSION file 2021-02-19 10:46:29 +01:00
b2d153bb17 Changing some files related to the update process 2021-02-18 22:53:49 +01:00
67ac58ef46 Deleting Q&A. 2021-02-18 09:17:54 +01:00
40 changed files with 1019 additions and 135 deletions

View File

@ -40,15 +40,6 @@ Once installed, you can connect yourself to the TinyCheck backend by browsing th
The backend allows you to edit the configuration of TinyCheck, add extended IOCs and whitelisted elements in order to prevent false positives. Several IOCs are already provided such as few suricata rules, FreeDNS, Name servers, CIDRs known to host malicious servers and so on.
### Questions & Answers
**Your project seem very cool, does it send data to Kaspersky or any telemetry server?**<br /><br />
No, at all. You can look to the sources, the only data sent by TinyCheck is an HTTP GET request to a website that you can specify in the config, as well as the watchers URLs. Kaspersky don't - and will not - receive any telemetry from your TinyCheck device.<br /><br />
**Can you list some hardware which can be used with this project (touch screen, wifi dongle etc.)?**<br /><br />
Unfortunately, we prefer to not promote any hardware/constructor/website on this page. Do not hesitate to contact us if you want specific references. <br /><br />
**I'm not very confortable with the concept of "watchers" as the IOCs downloaded are public. Do you plan to develop a server to centralize AMBER/RED IOCs?**<br /><br />
Yes, if the demand is felt by NGOs (contact us!). Is it possible to develop this kind of thing, allowing you to centralize your IOCs and managing your fleet of TinyCheck instances on a server that you host. The server can also embed better detection rules thanks to the telemetry that it will receive from devices.<br />
### Special thanks
**Guys who provided some IOCs**

View File

@ -353,7 +353,7 @@ class ZeekEngine(object):
self.alerts.append({"title": self.template["ADV-01"]["title"].format(host),
"description": self.template["ADV-01"]["description"].format(host, nb),
"host": host,
"level": "High",
"level": "Moderate",
"id": "ADV-01"})
def resolve(self, ip_addr):

112
analysis/locales/de.json Normal file
View File

@ -0,0 +1,112 @@
{
"alerts": {
"PROTO-01": {
"title": "Es besteht {} Kommunikationsverbindung zu {} außerhalb des lokalen Netzwerks.",
"description": "Das Protokoll {} wird häufig in internen Netzwerken verwendet. Bitte überprüfen Sie, ob der Host {} andere Warnungen verursacht hat, was auf bösartiges Verhalten hindeuten kann."
},
"PROTO-02": {
"title": "{} Verbindung zu {} zu einem Port größer als oder gleich {}.",
"description": "{} Verbindungen zu {} über den Port {} wurden erkannt. Die Verwendung eines nicht standardmäßigen Ports ist manchmal ein Merkmal für bösartige Aktivitäten. Wir empfehlen, die Reputation dieses Hosts zu überprüfen, indem Sie sich andere Warnungen ansehen und im Internet danach suchen."
},
"PROTO-03": {
"title": "Mit dem Host {} wurde per HTTP kommuniziert.",
"description": "Ihr Gerät hat mit dem Host {} über das unverschlüsselte HTTP-Protokoll kommuniziert. Auch wenn dieses Verhalten an sich nicht bösartig ist, ist es ungewöhnlich, dass von Smartphone-Anwendungen, die im Hintergrund laufen, HTTP-Kommunikationen ausgehen. Bitte überprüfen Sie die Reputation des Hosts anhand einer Internetsuche."
},
"PROTO-04": {
"title": "Mit dem Host {} wurde über einen nicht standardmäßigen Port ({}) per HTTP kommuniziert.",
"description": "Ihr Gerät hat mit dem Host {} über den Port {} über das unverschlüsselte HTTP-Protokoll kommuniziert. Dieses Verhalten ist recht ungewöhnlich. Bitte überprüfen Sie die Reputation des Hosts anhand einer Internetsuche."
},
"PROTO-05": {
"title": "Der Server {} wurde während der Sitzung nicht in einer DNS-Abfrage aufgelöst.",
"description": "Das bedeutet, dass der Server {} möglicherweise in keinen Domain-Namen aufgelöst wird oder dass die Auflösung bereits vom Gerät zwischengespeichert wurde. Wenn dieser Host in anderen Warnungen vorkommt, überprüfen Sie ihn bitte."
},
"IOC-01": {
"title": "Es wurde eine Verbindung zu {} hergestellt ({}), was als {} gekennzeichnet ist.",
"description": "Der Host {} wurde aufgrund bösartiger Aktivitäten explizit auf die Sperrliste gesetzt. Ihr Gerät ist wahrscheinlich kompromittiert und muss von IT-Sicherheitsexperten genauer untersucht werden."
},
"IOC-02": {
"title": "Kommunikation mit {} unter dem CIDR {}, der als {} gekennzeichnet ist.",
"description": "Der Server {} wird in einem Netzwerk gehostet, das für bösartige Aktivitäten bekannt ist. Auch wenn dieses Verhalten an sich nicht bösartig ist, müssen Sie überprüfen, ob dieser Host auch in anderen Warnungen erwähnt wird. Wenn Sie Zweifel haben, suchen Sie im Internet nach diesem Host, um zu sehen, ob er legitim ist."
},
"IOC-03": {
"title": "Es wurde eine DNS-Abfrage zu {} ausgeführt, was als {} gekennzeichnet ist.",
"description": "Der in der Aufnahme vorkommende Domain-Name {} wurde explizit als bösartig gekennzeichnet. Dies weist darauf hin, dass Ihr Gerät wahrscheinlich kompromittiert ist und eingehend untersucht werden muss."
},
"IOC-04": {
"title": "Es wurde eine DNS-Abfrage zu {} ausgeführt, was als {} gekennzeichnet ist.",
"description": "Der in der Aufnahme vorkommende Domain-Name {} wurde explizit als Tracker gekennzeichnet. Dies weist darauf hin, dass eine der aktiven Apps Ihren Standort geografisch verfolgt."
},
"IOC-05": {
"title": "Es wurde eine DNS-Abfrage zur Domain {} ausgeführt, die einen Free-DNS-Dienst nutzt.",
"description": "Der Domain-Name {} nutzt einen Free-DNS-Dienst. Dienste dieser Art werden häufig von Cyberkriminellen oder staatlich unterstützten Angreifern bei ihren Operationen genutzt. Es ist sehr verdächtig, dass eine im Hintergrund laufende Anwendung einen solchen Dienst verwendet. Bitte untersuchen Sie das näher."
},
"IOC-06": {
"title": "Es wurde eine DNS-Abfrage zur Domain {} ausgeführt, die eine verdächtige TLD enthält.",
"description": "Der Domain-Name {} nutzt eine verdächtige Top-Level-Domain ({}). Diese nicht-generische TLD ist zwar selbst nicht bösartig, wird aber häufig von Cyberkriminellen und bei staatlich unterstützten Operationen verwendet. Bitte überprüfen Sie diese Domain anhand einer Internetsuche. Wenn dieser Host in anderen Warnungen erwähnt wird, können Sie ihn als sehr verdächtig betrachten."
},
"IOC-07": {
"title": "Ein Zertifikat, das mit {} Aktivitäten verknüpft ist, wurde in der Kommunikationsverbindung zu {} gefunden.",
"description": "Das Zertifikat ({}), das mit {} verknüpft ist, wurde explizit als bösartig gekennzeichnet. Dies weist darauf hin, dass Ihr Gerät wahrscheinlich kompromittiert ist und eine forensische Analyse benötigt."
},
"ACT-01": {
"title": "Die Domain {} nutzt einen verdächtigen Nameserver ({}).",
"description": "Der Domain-Name {} nutzt einen Nameserver, der explizit mit bösartigen Aktivitäten in Verbindung gebracht wird. Viele Cyberkriminelle und staatlich unterstützte Angreifer nutzen Registrare dieser Art, weil sie Kryptowährungen und anonyme Zahlungen zulassen. Es wird empfohlen, diese Domain und die damit verknüpfte laufende Anwendung mithilfe einer forensischen Analyse des Telefons näher zu untersuchen."
},
"ACT-02": {
"title": "Die Domain {} wurde vor kurzem (vor {} Tagen) erstellt.",
"description": "Der Domainname {} ist neu. Auch wenn dies nicht von Natur aus böswillig ist, richten Angreifer häufig für jede Kampagne eine neue Infrastruktur ein, die zur Verwendung neu registrierter Domainnamen führen kann."
},
"SSL-01": {
"title": "SSL-Verbindung über einen nicht standardmäßigen Port ({})",
"description": "Es ist ungewöhnlich, dass SSL-Verbindungen von Smartphones über einen nicht standardmäßigen Port hergestellt werden. Das kann durchaus legitim sein, aber wir empfehlen dennoch, die Reputation von {} zu überprüfen. Sehen Sie sich dazu den entsprechenden WHOIS-Eintrag, das zugehörige autonome System und das Erstellungsdatum an und suchen Sie im Internet danach."
},
"SSL-02": {
"title": "Eine SSL-Verbindung zu {} verwendet ein kostenloses Zertifikat.",
"description": "Kostenlose Zertifikate wie z. B. Let's Encrypt werden gerne von Command-and-Control-Servern verwendet, die mit bösartigen Implants und Phishing-Webseiten in Verbindung stehen. Wir empfehlen, den mit diesem Zertifikat verknüpften Host zu überprüfen. Sehen Sie sich dazu seinen Domain-Namen und das Erstellungsdatum an oder überprüfen Sie die Reputation des Hosts im Internet."
},
"SSL-03": {
"title": "Das mit {} verknüpfte Zertifikat ist selbstsigniert.",
"description": "Die Verwendung von selbstsignierten Zertifikaten ist in der Infrastruktur von Angreifern weit verbreitet. Wir empfehlen, den mit diesem Zertifikat verknüpften Host {} zu überprüfen. Sehen Sie sich dazu seinen Domain-Namen (falls vorhanden), den WHOIS-Eintrag und das Erstellungsdatum an und überprüfen Sie die Reputation des Hosts im Internet."
},
"ADV-01": {
"title": "Überprüfen Sie die Warnungen für {}",
"description": "Bitte überprüfen Sie die Reputation des Hosts {}. Dieser scheint bösartig zu sein, da er während der Sitzung {} Warnungen verursacht hat."
},
"SNORT-01": {
"title": "Suricata-Regel ausgelöst: {}",
"description": "Eine Netzwerkerkennungsregel wurde ausgelöst. Es ist wahrscheinlich, dass Ihr Gerät kompromittiert wurde oder verdächtiges Verhalten aufweist."
}
},
"report": {
"numbers": [
"eine",
"zwei",
"drei",
"vier",
"fünf",
"sechs",
"sieben",
"acht",
"neun"
],
"suspect_title": "Verdächtige Kommunikationsverbindungen",
"uncat_title": "Kommunikationsverbindungen ohne Kategorie",
"whitelist_title": "Kommunikationsverbindungen auf der Zulassungsliste",
"protocol": "Protokoll",
"domain": "Domain",
"dst_ip": "Ziel-IP-Adresse",
"dst_port": "Ziel-Portnummer",
"device_name": "Gerätename",
"device_mac": "MAC-Adresse des Geräts",
"report_generated_on": "Bericht erstellt am",
"capture_duration": "Aufnahmedauer",
"packets_number": "Anzahl der Pakete",
"capture_sha1": "SHA1-Aufnahme",
"report_for_the_capture": "Bericht zur Aufnahme",
"report_footer": "Dieser Bericht wurde von einem TinyCheck-Gerät automatisch erstellt. Wenn Sie Fragen haben, Bugs melden oder Feedback geben möchten, kontaktieren Sie uns unter tinycheck@kaspersky.com.",
"high_msg": "Ihr Gerät scheint kompromittiert zu sein, da Sie {} Warnung(en) der Stufe \"Hoch\" haben.",
"moderate_msg": "Sie haben {} Warnungen der Stufe \"Mittel\": Ihr Gerät könnte kompromittiert sein. Bitte sehen Sie sich die Warnungen sorgfältig an.",
"low_msg": "Sie haben nur {} Warnungen der Stufe \"Niedrig\": Überprüfen Sie sie gerne.",
"none_msg": "Alles sieht gut aus kein Warnungen. Sehen Sie sich gerne auch die nicht kategorisierten Kommunikationsverbindungen an, falls welche vorhanden sind."
}
}

View File

@ -54,7 +54,7 @@
},
"ACT-02": {
"title": "The domain {} have been created quite recently ({} days ago).",
"description": "The domain name {} is quite new. Even this is not malicious by itself, its quite common for attackers to set up new infrastructure for each campaign which can lead to the use of recently registered domain names."
"description": "The domain name {} is quite new. Even this is not malicious by itself, its quite common for attackers to set up new infrastructure for each attack campaign which can lead to the use of recently registered domain names."
},
"SSL-01": {
"title": "SSL connection done on a non standard port ({}) to {}",

112
analysis/locales/it.json Normal file
View File

@ -0,0 +1,112 @@
{
"alerts": {
"PROTO-01": {
"title": "{} comunicazione in uscita dalla rete locale a {}.",
"description": "Il protocollo {} è comunemente utilizzato nelle reti interne. Verificare se l'host {} ha sfruttato altri avvisi, fattore che potrebbe indicare un possibile comportamento dannoso."
},
"PROTO-02": {
"title": "{} connessione a {} tramite una porta superiore o uguale a {}.",
"description": "Sono state rilevate {} connessioni a {} tramite la porta {}. L'utilizzo di una porta non standard a volte può essere associato ad attività dannose. È consigliabile verificare se questo host ha una buona reputazione esaminando altri avvisi ed effettuando una ricerca in Internet."
},
"PROTO-03": {
"title": "Sono state generate comunicazioni HTTP dirette all'host {}",
"description": "Il dispositivo ha effettuato uno scambio con l'host {} utilizzando HTTP, un protocollo non criptato. Anche se questo comportamento non è dannoso in sé, è raro rilevare comunicazioni HTTP generate da applicazioni per smartphone in esecuzione in background. Controllare la reputazione dell'host effettuando una ricerca in Internet."
},
"PROTO-04": {
"title": "Sono state rilevate comunicazioni HTTP dirette all'host {} su una porta non standard ({}).",
"description": "Il dispositivo ha effettuato uno scambio con l'host {} utilizzando HTTP, un protocollo non criptato sulla porta {}. Questo comportamento è decisamente insolito. Controllare la reputazione dell'host effettuando una ricerca in Internet."
},
"PROTO-05": {
"title": "Il server {} non è stato risolto da nessuna query DNS durante la sessione",
"description": "Questo indica che il server {} probabilmente non è stato risolto da nessun nome di dominio o che la risoluzione è già stata memorizzata nella cache dal dispositivo. Se l'host viene visualizzato in altri avvisi, controllarlo."
},
"IOC-01": {
"title": "È stata stabilita una connessione a {} ({}) con contrassegno {}.",
"description": "L'host {} è stato esplicitamente inserito nella blacklist per attività dannose. Probabilmente il dispositivo è compromesso e deve essere esaminato più a fondo da professionisti della sicurezza IT."
},
"IOC-02": {
"title": "Comunicazione a {} con il CIDR {} con contrassegno {}.",
"description": "Il server {} è ospitato in una rete nota per l'hosting di attività dannose. Nonostante questo comportamento non sia dannoso in sé, è necessario verificare se l'host è menzionato anche in altri avvisi. In caso di dubbi, cercare l'host in Internet per scoprire se è legittimo o meno."
},
"IOC-03": {
"title": "È stata effettuata una richiesta DNS a {} con contrassegno {}.",
"description": "Il nome di dominio {} visualizzato nell'acquisizione è stato esplicitamente contrassegnato come dannoso. Questo indica che il dispositivo è potenzialmente compromesso e deve essere esaminato a fondo."
},
"IOC-04": {
"title": "È stata effettuata una richiesta DNS a {} con contrassegno {}.",
"description": "Il nome di dominio {} visualizzato nell'acquisizione è stato esplicitamente contrassegnato come Tracker. Questo indica che una delle app attive esegue la geolocalizzazione dei movimenti dell'utente."
},
"IOC-05": {
"title": "È stata effettuata una richiesta DNS al dominio {} che è un servizio Free DNS.",
"description": "Il nome di dominio {} utilizza un servizio Free DNS. Questo tipo di servizio è comunemente utilizzato durante le operazioni di criminali informatici o autori di attacchi commissionati da stati esteri. L'utilizzo di questo tipo di servizio da parte di un'applicazione in esecuzione in background è molto sospetto e richiede ulteriori indagini."
},
"IOC-06": {
"title": "È stata effettuata una richiesta DNS al dominio {} contenente un dominio di primo livello sospetto.",
"description": "Il nome di dominio {} utilizza un dominio di primo livello sospetto ({}). Anche se non dannoso, questo dominio di primo livello non generico viene utilizzato regolarmente durante le operazioni di criminali informatici o autori di attacchi commissionati da stati esteri. Controllare questo dominio effettuando una ricerca tramite un motore di ricerca Internet. Se altri avvisi sono correlati all'host, è necessario considerare questo elemento molto sospetto."
},
"IOC-07": {
"title": "Nella comunicazione a {} è stato rilevato un certificato associato ad attività {}.",
"description": "Il certificato ({}) associato a {} è stato esplicitamente contrassegnato come dannoso. Questo indica che il dispositivo è potenzialmente compromesso e necessita di un'analisi forense."
},
"ACT-01": {
"title": "Il dominio {} utilizza un server dei nomi sospetto ({}).",
"description": "Il nome di dominio {} utilizza un server dei nomi che è stato esplicitamente contrassegnato come associato ad attività dannose. Molti criminali informatici e autori di attacchi commissionati da stati esteri utilizzano questo tipo di registrar poiché sono ammessi criptovalute e pagamenti anonimi. È consigliabile indagare su questo dominio e sull'applicazione in esecuzione associata eseguendo un'analisi forense del telefono."
},
"ACT-02": {
"title": "Il dominio {} è stato creato di recente ({} giorni fa)",
"description": "Il nome di dominio {} è nuovo. Anche questo non è intrinsecamente dannoso, è abbastanza comune per gli aggressori impostare una nuova infrastruttura per ogni campagna, che può portare all'uso di nomi di dominio appena registrati."
},
"SSL-01": {
"title": "Connessione SSL eseguita su una porta non standard ({}) a {}",
"description": "Non è comune rilevare connessioni SSL generate da smartphone tramite porte non standard. Anche se questo può essere del tutto legittimo, è consigliabile controllare la reputazione di {} prestando attenzione al record WHOIS, al sistema autonomo associato e alla data di creazione, nonché effettuando una ricerca in Internet."
},
"SSL-02": {
"title": "Una connessione SSL a {} utilizza un certificato gratuito.",
"description": "I certificati gratuiti, come Let's Encrypt, sono ampiamente utilizzati dai server di comando e controllo associati a insediamenti dannosi o pagine Web di phishing. È consigliabile controllare l'host associato a questo certificato, prestando attenzione al nome di dominio e alla data di creazione o verificandone la reputazione in Internet."
},
"SSL-03": {
"title": "Il certificato associato a {} è autofirmato.",
"description": "L'utilizzo di certificati autofirmati è una consuetudine per l'infrastruttura degli autori degli attacchi. È consigliabile controllare l'host {} associato a questo certificato, prestando attenzione all'eventuale nome di dominio, al record WHOIS e alla data di creazione, nonché verificandone la reputazione in Internet."
},
"ADV-01": {
"title": "Controllare gli avvisi per {}",
"description": "Controllare la reputazione dell'host {}, che sembra di natura dannosa poiché ha sfruttato {} avvisi durante la sessione."
},
"SNORT-01": {
"title": "Regola Suricata attivata: {}",
"description": "È stata attivata una regola di rilevamento della rete. È probabile che il dispositivo sia stato compromesso o che presenti comportamenti sospetti."
}
},
"report": {
"numbers": [
"uno",
"due",
"tre",
"quattro",
"cinque",
"sei",
"sette",
"otto",
"nove"
],
"suspect_title": "Comunicazioni sospette",
"uncat_title": "Comunicazioni non categorizzate",
"whitelist_title": "Comunicazioni inserite nella whitelist",
"protocol": "Protocollo",
"domain": "Dominio",
"dst_ip": "Indirizzo IP di destinazione",
"dst_port": "Numero della porta di destinazione",
"device_name": "Nome dispositivo",
"device_mac": "Indirizzo MAC dispositivo",
"report_generated_on": "Rapporto generato in data",
"capture_duration": "Durata acquisizione",
"packets_number": "Numero di pacchetti",
"capture_sha1": "SHA1 acquisizione",
"report_for_the_capture": "Rapporto relativo all'acquisizione",
"report_footer": "Questo rapporto è stato generato automaticamente da un dispositivo Tinycheck. Per eventuali domande, segnalazioni di bug o feedback, contattare tinycheck@kaspersky.com.",
"high_msg": "Sembra che il dispositivo sia compromesso poiché sono presenti {} avvisi con priorità elevata.",
"moderate_msg": "Sono presenti {} avvisi con priorità moderata, è possibile che il dispositivo sia compromesso. Esaminarli con attenzione.",
"low_msg": "Sono presenti solo {} avvisi con priorità bassa da controllare.",
"none_msg": "Sembra tutto a posto, non sono presenti avvisi. Controllare eventuali comunicazioni non categorizzate."
}
}

112
analysis/locales/pt.json Normal file
View File

@ -0,0 +1,112 @@
{
"alerts": {
"PROTO-01": {
"title": "Comunicação {} externa à rede local para {}.",
"description": "O protocolo {} é comumente usado em redes internas. Verifique se o host {} acionou outros alertas que possam indicar um possível comportamento malicioso."
},
"PROTO-02": {
"title": "Conexão {} a {} para uma porta maior ou igual a {}.",
"description": "Conexões {} foram detectadas por {} usando a porta {}. O uso da porta não padrão é comumente associado a atividades maliciosas. É recomendado verificar se esse host tem uma boa reputação verificando outros alertas e pesquisando-o na internet."
},
"PROTO-03": {
"title": "Comunicações HTTP foram realizadas com o host {}",
"description": "O dispositivo foi conectado ao host {} por meio de HTTP, um protocolo não criptografado. Mesmo que esse comportamento, por si só, não seja malicioso, é incomum que comunicações HTTP sejam estabelecidas por meio de aplicativos móveis em segundo plano. Verifique a reputação do host pesquisando-o na Internet."
},
"PROTO-04": {
"title": "Comunicações HTTP foram detectadas pelo host {} por meio de uma porta não padrão ({}).",
"description": "O dispositivo foi conectado ao host {} por meio de HTTP, um protocolo não criptografado na porta {}. Esse comportamento é incomum. Verifique a reputação do host pesquisando-o na Internet."
},
"PROTO-05": {
"title": "O servidor {} não foi resolvido por nenhuma consulta de DNS durante a sessão",
"description": "Isso significa provavelmente que o servidor {} não foi resolvido por nenhum nome de domínio ou a resolução já foi armazenada pelo dispositivo. Se o host aparecer em outros alertas, verifique-os."
},
"IOC-01": {
"title": "Uma conexão foi estabelecida com {} ({}) e marcada como {}.",
"description": "O host {} foi explicitamente bloqueado devido a atividades maliciosas. O dispositivo provavelmente foi comprometido e precisa ser analisado com cuidado por profissionais de segurança de TI."
},
"IOC-02": {
"title": "Comunicação com {} com o CIDR {} marcado como {}.",
"description": "O host {} está hospedado em uma rede que é conhecida por atividades maliciosas. Mesmo que o comportamento, por si só, não seja malicioso, é necessário verificar se outros alertas são gerados para esse host. Em caso de dúvidas, pesquise esse host na internet para verificar sua autenticidade."
},
"IOC-03": {
"title": "Uma solicitação de DNS foi feita para {}, marcado como {}.",
"description": "O nome de domínio {} visto na captura foi explicitamente marcado como malicioso. Isso indica que o dispositivo provavelmente foi comprometido e precisa ser analisado com cuidado."
},
"IOC-04": {
"title": "Uma solicitação de DNS foi feita para {}, marcado como {}.",
"description": "O nome de domínio {} visto na captura foi explicitamente marcado como um Tracker. Isso indica que um dos aplicativos ativos está rastreando sua localização."
},
"IOC-05": {
"title": "Uma solicitação de DNS foi feita para o domínio {}, que é um DNS gratuito.",
"description": "O nome de domínio {} está usando um serviço de DNS gratuito. Esse tipo de serviço é comumente usado por cibercriminosos ou agências de inteligência estatais no exercício de suas funções. É muito suspeito que aplicativos em execução em segundo plano usem esse tipo de serviço e isso deve ser analisado com cuidado."
},
"IOC-06": {
"title": "Uma solicitação de DNS foi feita para o domínio {}, que contém um TLD (domínio de nível superior) suspeito.",
"description": "O nome de domínio {} está usando um TLD suspeito ({}). Mesmo não sendo malicioso, esse TLD não genérico é frequentemente usado por cibercriminosos ou agências de inteligência estatais. Analise a reputação do domínio pesquisando-o na internet. Se outros alertas forem observados, considere esse host como muito suspeito."
},
"IOC-07": {
"title": "Um certificado associado a atividades de {} foi encontrado na comunicação para {}.",
"description": "O certificado ({}) associado a {} foi explicitamente marcado como malicioso. Isso indica que o dispositivo provavelmente foi comprometido e precisa de uma análise forense."
},
"ACT-01": {
"title": "O domínio {} está usando um servidor de nomes suspeito ({}).",
"description": "O nome de domínio {} está usando um servidor de nomes explicitamente marcado como associado a atividades maliciosas. Muitos cibercriminosos e agentes de inteligência estatais usam esse tipo de registradores porque isso permite pagamentos com criptomoedas e anônimos. É recomendável investigar esse domínio e o aplicativo em execução por meio de uma análise forense do telefone."
},
"ACT-02": {
"title": "O domínio {} foi criado recentemente ({} dias atrás).",
"description": "O nome de domínio {} é novo. Mesmo que isso não seja intrinsecamente malicioso, é bastante comum que os invasores configurem uma nova infraestrutura para cada campanha, o que pode levar ao uso de nomes de domínio recém-registrados."
},
"SSL-01": {
"title": "Conexão SSL feita em uma porta não padrão ({}) para {}",
"description": "Não é comum ver conexões SSL a partir de dispositivos móveis usando portas não padrão. Mesmo que a conexão pareça ser autêntica, é recomendável analisar a reputação de {} verificando pesquisando na internet o registro de domínio, o sistema autônomo associado e a data de criação."
},
"SSL-02": {
"title": "Uma conexão SSL com {} está usando um certificado gratuito.",
"description": "Certificados gratuitos, como o Let's Encrypt, são amplamente usados por servidores de comando e controle associados a arquivos maliciosos ou páginas de phishing. É recomendável analisar o host associado a esse certificado verificando o nome de domínio, a data de criação ou pesquisando sua reputação na internet."
},
"SSL-03": {
"title": "O certificado associado a {} é autoassinado.",
"description": "O uso de certificados autoassinados é comum na infraestrutura de invasores. É recomendável analisar o host {} que está associado a esse certificado verificando o nome e o registro de domínio (se houver), a data de criação e sua reputação na internet."
},
"ADV-01": {
"title": "Verifique os alertas para {}",
"description": "Verifique a reputação do host {}, este parece ser malicioso, pois acionou alertas para {} durante a sessão."
},
"SNORT-01": {
"title": "Regra do Suricata acionada: {}",
"description": "Uma regra de detecção de rede foi acionada. É provável que o dispositivo tenha sido comprometido ou apresente comportamento suspeito."
}
},
"report": {
"numbers": [
"um",
"dois",
"três",
"quatro",
"cinco",
"seis",
"sete",
"oito",
"nove"
],
"suspect_title": "Comunicações suspeitas",
"uncat_title": "Comunicações não categorizadas",
"whitelist_title": "Comunicações permitidas",
"protocol": "Protocolo",
"domain": "Domínio",
"dst_ip": "Endereço IP do dst",
"dst_port": "Número da porta do dst",
"device_name": "Nome do dispositivo",
"device_mac": "Endereço MAC do dispositivo",
"report_generated_on": "Relatório criado em",
"capture_duration": "Duração da captura",
"packets_number": "Número de pacotes",
"capture_sha1": "Captura SHA1",
"report_for_the_capture": "Relatório da captura",
"report_footer": "Este relatório foi gerado automaticamente por um dispositivo Tinycheck. Em caso de dúvidas, relatório de erros ou comentários, envie uma mensagem para tinycheck@kaspersky.com.",
"high_msg": "O dispositivo parece estar comprometido porque você tem {} alerta(s) crítico(s).",
"moderate_msg": "Você tem {} alerta(s) moderado(s), seu dispositivo pode estar comprometido. Analise-os com cuidado.",
"low_msg": "Você tem apenas {} alerta(s) leve(s), não deixe de verificá-los.",
"none_msg": "Tudo parece estar bem, zero alertas. Não deixe de verificar comunicações não categorizadas, se houver."
}
}

112
analysis/locales/ru.json Normal file
View File

@ -0,0 +1,112 @@
{
"alerts": {
"PROTO-01": {
"title": "Обнаружено подключение {}, ведущее за пределы локальной сети к {}.",
"description": "Протокол {} обычно используется во внутренних сетях. Проверьте, выдавало ли устройство {} другие предупреждения, которые могут свидетельствовать о вредоносной активности."
},
"PROTO-02": {
"title": "Подключение {} к {} установлено на порте, равном или более {}.",
"description": "Обнаружено {} подключений к {} с использованием порта {}. Использование нестандартного порта иногда может свидетельствовать о вредоносной активности. Рекомендуется проверить репутацию этого устройства, просмотрев другие предупреждения и выполнив их поиск в интернете."
},
"PROTO-03": {
"title": "Установлено HTTP-подключение к устройству {}",
"description": "Ваше устройство обменивается данными с устройством {} по незашифрованному протоколу HTTP. Даже если такое поведение само по себе не является вредоносным, фоновое исходящее HTTP-подключение является нетипичным для приложений, работающих на смартфоне в фоновом режиме. Проверьте репутацию устройства, выполнив поиск в интернете."
},
"PROTO-04": {
"title": "Установлено HTTP-подключение к устройству {} через нестандартный порт ({}).",
"description": "Ваше устройство обменивается данными с устройством {} по незашифрованному протоколу HTTP через порт {}. Такое поведение является нетипичным. Проверьте репутацию устройства, выполнив поиск в интернете."
},
"PROTO-05": {
"title": "Сервер {} не разрешался никакими DNS-запросами во время сеанса",
"description": "Это, вероятно, означает, что сервер {} не разрешен ни одним доменным именем или разрешение уже кешировано устройством. Если устройство фигурирует в других предупреждениях, проверьте его."
},
"IOC-01": {
"title": "Установлено соединение с {} ({}), отмеченным как {}.",
"description": "Устройство {} было явно занесено в черный список за выполнение вредоносных действий. Ваше устройство, вероятно, взломано. Требуется более тщательное расследование специалистами по IT-безопасности."
},
"IOC-02": {
"title": "Подключение к {}, отмеченному как {}, в рамках бесклассовой адресации {}.",
"description": "Сервер {} размещен в сети, в которой размещаются объекты, выполняющие вредоносные действия. Даже если такое поведение само по себе не является вредоносным, необходимо проверить, не упоминается ли это устройство в других предупреждениях. При наличии сомнений выполните поиск этого устройства в интернете и выясните, является ли его поведение легитимным."
},
"IOC-03": {
"title": "Выполнен DNS-запрос к {}, отмеченному как {}.",
"description": "Доменное имя {}, обнаруженное при сборе данных, явно отмечено как вредоносное. Это указывает на то, что ваше устройство, вероятно, взломано и требуется тщательное расследование."
},
"IOC-04": {
"title": "Выполнен DNS-запрос к {}, отмеченному как {}.",
"description": "Доменное имя {}, обнаруженное при сборе данных, явно отмечено как геотрекер. Это указывает, что одно из активных приложений отслеживает ваши перемещения."
},
"IOC-05": {
"title": "Выполнен DNS-запрос к домену {}, использующему бесплатную службу DNS.",
"description": "Доменное имя {} использует бесплатную службу DNS. Такие службы обычно используются киберпреступниками или спонсируемыми государством злоумышленниками для атак. Очень подозрительно, что приложение, работающее в фоновом режиме, использует такую службу. Требуется расследование."
},
"IOC-06": {
"title": "Выполнен DNS-запрос к домену {}, содержащему подозрительный домен верхнего уровня.",
"description": "Доменное имя {} использует подозрительный домен верхнего уровня ({}). Даже не являясь вредоносным, этот не универсальный домен верхнего уровня регулярно используется киберпреступниками или спонсируемыми государством злоумышленниками. Проверьте этот домен, выполнив поиск в интернете. Если с этим устройством связаны другие предупреждения, это очень подозрительно."
},
"IOC-07": {
"title": "Сертификат, связанный с действиями {}, был обнаружен при взаимодействии с {}.",
"description": "Сертификат ({}), связанный с {}, явно отмечен как вредоносный. Это указывает на то, что ваше устройство, вероятно, взломано и требуется провести экспертный анализ."
},
"ACT-01": {
"title": "Домен {} использует подозрительный сервер имен ({}).",
"description": "Доменное имя {} использует сервер имен, который явно отмечен как связанный с вредоносными действиями. Многие киберпреступники и спонсируемые государством злоумышленники пользуются такими регистраторами, поскольку они позволяют использовать криптовалюту и анонимные платежи. Рекомендуется исследовать этот домен и связанные с ним работающие приложения, выполнив экспертный анализ телефона."
},
"ACT-02": {
"title": "Домен {} был создан недавно ({} дней назад).",
"description": "Доменное имя {} новое. Даже это не является вредоносным по своей сути, злоумышленники довольно часто создают новую инфраструктуру для каждой кампании атаки, что может привести к использованию недавно зарегистрированных доменных имен."
},
"SSL-01": {
"title": "SSL-подключение к {} выполнено через нестандартный порт ({})",
"description": "SSL-подключение со смартфонов с использованием нестандартных портов является нетипичным. Даже если это действие является абсолютно легитимным, рекомендуется проверить репутацию {}, просмотрев его запись WHOIS, связанную автономную систему, дату создания, а также выполнив поиск в интернете."
},
"SSL-02": {
"title": "SSL-подключение к {} использует бесплатный сертификат.",
"description": "Бесплатные сертификаты, такие как Let's Encrypt, широко используются командными серверами, связанными со встраиваемым вредоносным кодом или фишинговыми веб-страницами. Рекомендуется проверить устройство, связанное с этим сертификатом, изучив его доменное имя, дату создания и репутацию в интернете."
},
"SSL-03": {
"title": "Сертификат, связанный с {}, является самоподписанным.",
"description": "Использование самоподписанных сертификатов типично для инфраструктуры злоумышленников. Рекомендуется проверить устройство {}, связанное с этим сертификатом, изучив его доменное имя (если имеется), запись WHOIS, дату создания и репутацию в интернете."
},
"ADV-01": {
"title": "Проверьте предупреждения для {}",
"description": "Проверьте репутацию устройства {}. Оно кажется вредоносным, поскольку для него сработало {} предупрежд. во время сеанса."
},
"SNORT-01": {
"title": "Сработало правило Suricata: {}",
"description": "Сработало правило обнаружения в сети. Вероятно, ваше устройство взломано или ведет себя подозрительно."
}
},
"report": {
"numbers": [
"один",
"два",
"три",
"четыре",
"пять",
"шесть",
"семь",
"восемь",
"девять"
],
"suspect_title": "Подозрительные подключения",
"uncat_title": "Неклассифицированные подключения",
"whitelist_title": "Разрешенные подключения",
"protocol": "Протокол",
"domain": "Домен",
"dst_ip": "IP-адрес назначения",
"dst_port": "Номер порта назначения",
"device_name": "Имя устройства",
"device_mac": "MAC-адрес устройства",
"report_generated_on": "Дата формирования отчета",
"capture_duration": "Продолжительность сбора данных",
"packets_number": "Количество пакетов",
"capture_sha1": "Сбор данных SHA1",
"report_for_the_capture": "Отчет для сбора данных",
"report_footer": "Этот отчет был автоматически сформирован устройством TinyCheck. С любыми вопросами, сообщениями об ошибках или отзывами обращайтесь по адресу tinycheck@kaspersky.com.",
"high_msg": "Вероятно, ваше устройство взломано, поскольку у вас {} предупрежд. высокого уровня.",
"moderate_msg": "У вас {} предупрежд. среднего уровня. Возможно, ваше устройство взломано. Внимательно изучите их.",
"low_msg": "У вас {} предупрежд. низкого уровня, проверьте их.",
"none_msg": "Предупреждения отсутствуют, система выглядит защищенной. Не забывайте проверять неклассифицированные подключения, если они имеются."
}
}

1
app/backend/.npmrc Normal file
View File

@ -0,0 +1 @@
timeout=60000

1
app/frontend/.npmrc Normal file
View File

@ -0,0 +1 @@
timeout=60000

View File

@ -55,11 +55,19 @@
this.set_lang();
})
.catch(error => { console.log(error) });
},
get_version: function() {
axios.get('/api/update/get-version', { timeout: 60000 })
.then(response => {
if(response.data.status) window.current_version = response.data.current_version
})
.catch(error => { console.log(error) });
}
},
created: function() {
window.config = {}
this.get_config();
this.get_version();
}
}
</script>

File diff suppressed because one or more lines are too long

View File

@ -2,9 +2,11 @@
<div class="controls" v-if="display">
<i class="off-icon" v-on:click="action('shutdown')" v-if="off_available"></i>
<i class="quit-icon" v-on:click="action('quit')" v-if="quit_available"></i>
<i :class="[ update_available ? 'update-icon' :'no-update-icon' ]" v-if="update_possibe" @click="$router.push({ name: 'update' })"></i>
<i class="home-icon" @click="$router.push({ name: 'loader' })"></i>
<i class="update-icon" v-if="update_available&&update_possible" @click="$router.push({ name: 'update' })"></i>
</div>
</template>
<script>
import axios from 'axios'
@ -14,7 +16,7 @@ export default {
return {
display: true,
update_available: false,
update_possible: true,
update_possible: false,
quit_available: false,
off_available: false
}
@ -33,13 +35,16 @@ export default {
.then(response => {
if(response.data.status) {
if(response.data.message == "A new version is available"){
// Allow to show the warning chip.
this.update_available = true
this.update_possible = true
} else if(response.data.message == "This is the latest version"){
this.update_available = false
this.update_possible = true
// Pass the versions as "global vars" through window variable.
window.current_version = response.data.current_version
window.next_version = response.data.next_version
}
} else {
} else {
this.update_possible = false
}
})

View File

@ -78,5 +78,12 @@
"tap_msg": "Podeu tocar la tecla USB per iniciar una nova captura.",
"capture_download": "La descàrrega de la captura començarà ...",
"start_capture_btn": "Inicia una altra captura"
},
"update": {
"tinycheck_needs": "TinyCheck ha d´actualitzar-se a la propera versió",
"please_click": "Feu click al botó de sota per actualitzar",
"the_process": "El procés pot trigar uns minuts, si us plau esperi ...",
"update_finished": "Actualització finalitzada, actualitzant la interfície...",
"update_it": "Actualitzar ara"
}
}

View File

@ -0,0 +1,89 @@
{
"home": {
"welcome_msg": "Willkommen bei TinyCheck!",
"help_msg": "Wir helfen Ihnen bei der Überprüfung Ihres Geräts.",
"start_btn": "Fangen wir an!"
},
"analysis": {
"question": "Möchten Sie die erfassten Kommunikationsverbindungen analysieren?",
"no_btn": "Nein, nur speichern",
"yes_btn": "Ja, analysieren",
"please_wait_msg": "Bitte warten Sie, während die Analyse läuft …",
"some_time_msg": "Dies kann eine Weile dauern …"
},
"capture": {
"intercept_coms_msg": "Abfangen der Kommunikationsverbindungen von ",
"stop_btn": "Aufnahme beenden"
},
"generate-ap": {
"network_name": "Netzwerkname",
"network_password": "Netzwerkpasswort",
"tap_msg": "Tippen Sie auf den weißen Rahmen, um ein neues Netzwerk zu erstellen.",
"generate_ap_msg": "Wir erstellen ein temporäres Netzwerk für Sie.",
"error_msg1": "Leider sind während der AP-Erstellung <br>einige Fehler aufgetreten.",
"error_msg2": "Bitte stellen Sie sicher, dass Ihr Gerät zwei WLAN-Schnittstellen besitzt,<br> und starten Sie es neu, um es erneut zu versuchen.",
"restart_btn": "Gerät neu starten"
},
"report": {
"show_full_report": "Vollständigen Bericht anzeigen",
"start_new_capture": "Neue Aufnahme starten",
"save_capture": "Aufnahme speichern",
"numbers": [
"null",
"eine",
"zwei",
"drei",
"vier",
"fünf",
"sechs",
"sieben",
"acht",
"neun",
"zehn",
"elf"
],
"stalkerware_msg": "Ihr Gerät ist durch Stalkerware<br>kompromittiert; bitte sehen Sie sich den Bericht an.",
"location_msg": "Eine Anwendung teilt Ihren<br> aktuellen Standort mit Dritten.",
"fine_msg": "Alles sieht gut aus kein Warnungen.",
"high_msg": "Sie haben {nb} Warnung der Stufe \"Hoch\":<br>Ihr Gerät scheint kompromittiert zu sein.",
"moderate_msg": "Sie haben {nb} Warnungen der Stufe \"Mittel\":<br>Ihr Gerät könnte kompromittiert sein.",
"low_msg": "Sie haben nur {nb} Warnungen der Stufe \"Niedrig\":<br> Überprüfen Sie sie gerne.",
"save_report": "Bericht speichern",
"report_of": "Bericht zu",
"ip_address": "IP-Adresse",
"mac_address": "MAC-Adresse",
"high": "Hoch",
"moderate": "Mittel",
"low": "Niedrig"
},
"wifi-select": {
"already_connected_question": "Sie scheinen bereits mit einem Netzwerk verbunden zu sein.<br>Möchten Sie die aktuelle Verbindung nutzen?",
"no_btn": "Nein, eine andere nutzen",
"yes_btn": "Ja, diese nutzen.",
"wifi_name": "WLAN-Name",
"refresh_btn": "Netzwerkliste aktualisieren",
"not_connected": "Sie scheinen nicht mit dem Internet verbunden zu sein.",
"please_config": "Bitte konfigurieren Sie die WLAN-Verbindung.",
"lets_do_btn": "OK, jetzt machen",
"no_internet": "Verwendung ohne Internet",
"wifi_connected": "WLAN verbunden",
"wifi_not_connected": "WLAN nicht verbunden. Bitte versuchen Sie es erneut.",
"tap_keyboard": "Tippen Sie auf die virtuelle Tastatur, um zu starten",
"wifi_password": "WLAN-Passwort",
"connect_to_it": "Damit verbinden"
},
"save-capture": {
"please_connect": "Bitte schließen Sie einen USB-Stick an, um Ihre Aufnahme zu speichern.",
"we_are_saving": "Wir speichern Ihre Aufnahme.",
"tap_msg": "Sie können den USB-Stick antippen, um eine neue Aufnahme zu starten.",
"capture_download": "Der Download der Aufnahme beginnt …",
"start_capture_btn": "Noch eine Aufnahme starten"
},
"update": {
"tinycheck_needs": "Ein neues Update von TinyCheck ist verfügbar",
"please_click": "Klicken Sie auf die Schaltfläche unten, um es zu aktualisieren",
"the_process": "Das Update kann einige Minuten dauern, bitte warten Sie ...",
"update_finished": "Update abgeschlossen, Sie werden weitergeleitet ...",
"update_it": "Aktualisieren Sie TinyCheck"
}
}

View File

@ -78,5 +78,12 @@
"tap_msg": "You can tap the USB key to start a new capture.",
"capture_download": "The capture download is going to start...",
"start_capture_btn": "Start another capture"
},
"update": {
"tinycheck_needs": "TinyCheck needs to be updated to the next version",
"please_click": "Please click on the button below to update it.",
"the_process": "The process can take few minutes, please wait...",
"update_finished": "Update finished, let's refresh the interface...",
"update_it": "Update it now"
}
}

View File

@ -46,7 +46,7 @@
"location_msg": "Una aplicación está compartiendo su <br /> geolocalización actual con un tercero.",
"fine_msg": "Todo parece correcto, cero alertas",
"high_msg": "Tiene {nb} alerta máxima, <br /> tu dispositivo parece estar comprometido",
"mild_msg": "Tiene {nb} alertas moderadas, <br /> tu dispositivo puede estar comprometido",
"moderate_msg": "Tiene {nb} alertas moderadas, <br /> tu dispositivo puede estar comprometido",
"low_msg": "Solo tiene {nb} alertas bajas, <br /> por favor revíselas",
"save_report": "Guardar el informe",
"report_of": "Informe de",
@ -63,9 +63,9 @@
"wifi_name": "Nombre de Wi-Fi",
"refresh_btn": "Actualizar lista de redes",
"not_connected": "Parece que no estás conectado a Internet",
"no_internet": "Úselo sin conexión",
"please_config": "Configure la conexión Wi-Fi.",
"lets_do_btn": "Ok, hagámoslo",
"no_internet": "Úselo sin conexión",
"wifi_connected": "Wi-Fi conectado",
"wifi_not_connected": "Wi-Fi no conectado. Vuelve a intentarlo",
"tap_keyboard": "Toque en el teclado virtual para comenzar",
@ -78,5 +78,12 @@
"tap_msg": "Puede tocar la llave USB para iniciar una nueva captura",
"capture_download": "La descarga de la captura va a comenzar ...",
"start_capture_btn": "Iniciar otra captura"
},
"update": {
"tinycheck_needs": "TinyCheck debe actualizarse a la próxima versión",
"please_click": "Haga click en el botón de abajo para actualizar",
"the_process": "El proceso puede tardar unos minutos, por favor espere ...",
"update_finished": "Actualización finalizada, actualizando la interfaz...",
"update_it": "Actualizar ahora"
}
}
}

View File

@ -78,5 +78,12 @@
"tap_msg": "Vous pouvez appuyer sur l'animation pour lancer une nouvelle capture.",
"capture_download": "Le téléchargement de la capture va se lancer...",
"start_capture_btn": "Lancer une nouvelle capture"
},
"update": {
"tinycheck_needs": "Une nouvelle mise à jour de TinyCheck est disponible",
"please_click": "Cliquez sur le bouton ci-dessous pour le mettre à jour",
"the_process": "La mise à jour peut prendre plusieurs minutes, merci d'attendre...",
"update_finished": "Mise à jour terminée, vous allez être redirigé...",
"update_it": "Mettre TinyCheck à jour"
}
}

View File

@ -0,0 +1,89 @@
{
"home": {
"welcome_msg": "Benvenuto in TinyCheck.",
"help_msg": "Verrà fornita assistenza per il controllo del dispositivo.",
"start_btn": "Cominciamo!"
},
"analysis": {
"question": "Analizzare le comunicazioni acquisite?",
"no_btn": "No, è sufficiente salvarle",
"yes_btn": "Sì, va bene",
"please_wait_msg": "Analisi in corso. Attendere...",
"some_time_msg": "Sì, l'operazione può richiedere un po' di tempo..."
},
"capture": {
"intercept_coms_msg": "Intercettazione delle comunicazioni di ",
"stop_btn": "Interrompi acquisizione"
},
"generate-ap": {
"network_name": "Nome della rete",
"network_password": "Password della rete",
"tap_msg": "Toccare il riquadro bianco per generare una nuova rete.",
"generate_ap_msg": "Viene generata una rete temporanea.",
"error_msg1": "Si sono verificati alcuni problemi <br>durante la creazione del punto di accesso.",
"error_msg2": "Verificare di disporre di due interfacce Wi-Fi nel dispositivo<br> e riprovare eseguendo il riavvio.",
"restart_btn": "Riavvia il dispositivo"
},
"report": {
"show_full_report": "Mostra il rapporto completo",
"start_new_capture": "Avvia una nuova acquisizione",
"save_capture": "Salva acquisizione",
"numbers": [
"zero",
"uno",
"due",
"tre",
"quattro",
"cinque",
"sei",
"sette",
"otto",
"nove",
"dieci",
"undici"
],
"stalkerware_msg": "Il dispositivo è compromesso da<br>uno stalkerware, controllare il rapporto.",
"location_msg": "Un'applicazione condivide la<br /> geolocalizzazione attuale con terze parti.",
"fine_msg": "Sembra tutto a posto, <br /> non sono presenti avvisi.",
"high_msg": "È presente {nb} avviso con priorità elevata,<br /> il dispositivo sembra compromesso.",
"moderate_msg": "Sono presenti {nb} avvisi con priorità moderata, è possibile che il dispositivo sia compromesso.",
"low_msg": "Sono presenti solo {nb} avvisi con priorità bassa<br /> da controllare.",
"save_report": "Salva il rapporto",
"report_of": "Rapporto di",
"ip_address": "Indirizzo IP",
"mac_address": "Indirizzo MAC",
"high": "elevata",
"moderate": "moderata",
"low": "bassa"
},
"wifi-select": {
"already_connected_question": "Sembra che sia già stata stabilita una connessione a una rete.<br>Utilizzare la connessione attuale?",
"no_btn": "No, utilizzane un'altra",
"yes_btn": "Sì, utilizzala.",
"wifi_name": "Nome Wi-Fi",
"refresh_btn": "Aggiorna elenco delle reti",
"not_connected": "Sembra che non sia stata stabilita la connessione a Internet.",
"please_config": "Configurare la connessione Wi-Fi.",
"lets_do_btn": "Ok, va bene.",
"no_internet": "Utilizzare senza Internet",
"wifi_connected": "Wi-Fi connesso",
"wifi_not_connected": "Wi-Fi non connesso. Riprovare.",
"tap_keyboard": "Toccare la tastiera virtuale per iniziare",
"wifi_password": "Password Wi-Fi",
"connect_to_it": "Stabilisci connessione"
},
"save-capture": {
"please_connect": "Collegare una chiave USB per salvare l'acquisizione.",
"we_are_saving": "Salvataggio dell'acquisizione in corso.",
"tap_msg": "È possible toccare la chiave USB per avviare una nuova acquisizione.",
"capture_download": "Il download dell'acquisizione sta per iniziare...",
"start_capture_btn": "Avvia un'altra acquisizione"
},
"update": {
"tinycheck_needs": "È disponibile un nuovo aggiornamento di TinyCheck",
"please_click": "Fare clic sul pulsante in basso per aggiornarlo",
"the_process": "L'aggiornamento potrebbe richiedere diversi minuti, attendere ...",
"update_finished": "Aggiornamento completato, verrai reindirizzato ...",
"update_it": "Aggiorna TinyCheck"
}
}

View File

@ -0,0 +1,89 @@
{
"home": {
"welcome_msg": "Bem vindo(a) ao TinyCheck.",
"help_msg": "Ajudaremos você a verificar o dispositivo.",
"start_btn": "Vamos começar!"
},
"analysis": {
"question": "Deseja analisar as comunicações capturadas?",
"no_btn": "Não, somente salvá-las",
"yes_btn": "Sim, vamos lá",
"please_wait_msg": "Aguarde enquanto realizamos a análise...",
"some_time_msg": "Sim, isso pode demorar um pouco..."
},
"capture": {
"intercept_coms_msg": "Interceptando as comunicações de ",
"stop_btn": "Parar a captura"
},
"generate-ap": {
"network_name": "Nome da rede",
"network_password": "Senha da rede",
"tap_msg": "Toque no quadro branco para criar uma nova rede.",
"generate_ap_msg": "Geramos uma rede temporária para você.",
"error_msg1": "Infelizmente, tivemos alguns problemas <br> durante a criação do AP.",
"error_msg2": "Verifique se você possui duas interfaces Wi-Fi no dispositivo<br> e tente novamente, reiniciando-o.",
"restart_btn": "Reiniciar o dispositivo"
},
"report": {
"show_full_report": "Mostrar o relatório completo",
"start_new_capture": "Iniciar nova captura",
"save_capture": "Salvar a captura",
"numbers": [
"zero",
"um",
"dois",
"três",
"quatro",
"cinco",
"seis",
"sete",
"oito",
"nove",
"dez",
"onze"
],
"stalkerware_msg": "Seu dispositivo foi comprometido por<br /> um stalkerware. Verifique o relatório.",
"location_msg": "Um aplicativo está compartilhando sua <br /> geolocalização com um terceiro.",
"fine_msg": "Tudo parece estar bem, zero alertas.",
"high_msg": "Você tem {nb} alerta crítico,<br /> o dispositivo parece estar comprometido.",
"moderate_msg": "Você tem {nb} alertas moderados,<br /> o dispositivo pode estar comprometido.",
"low_msg": "Você tem apenas {nb} alertas leves,<br /> não deixe de verificá-los.",
"save_report": "Salvar o relatório",
"report_of": "Relatório de",
"ip_address": "Endereço IP",
"mac_address": "Endereço MAC",
"high": "crítico",
"moderate": "moderado",
"low": "leve"
},
"wifi-select": {
"already_connected_question": "Parece que você já está conectado a uma rede.<br> Deseja usar a conexão atual?",
"no_btn": "Não, usar outra",
"yes_btn": "Sim, usar a conexão atual.",
"wifi_name": "Nome da rede Wi-Fi",
"refresh_btn": "Atualizar lista de redes",
"not_connected": "Você não está conectado à Internet.",
"please_config": "Configure a conexão Wi-Fi.",
"lets_do_btn": "Certo, vamos lá.",
"no_internet": "Use sem internet",
"wifi_connected": "Wi-Fi conectado",
"wifi_not_connected": "Wi-Fi desconectado. Tente novamente.",
"tap_keyboard": "Toque no teclado virtual para começar",
"wifi_password": "Senha do Wi-Fi",
"connect_to_it": "Conectar"
},
"save-capture": {
"please_connect": "Conecte uma chave USB para salvar a captura.",
"we_are_saving": "Estamos salvando a captura.",
"tap_msg": "Toque na chave USB para iniciar uma nova captura.",
"capture_download": "O download da captura vai começar...",
"start_capture_btn": "Iniciar nova captura"
},
"update": {
"tinycheck_needs": "Uma nova atualização do TinyCheck está disponível",
"please_click": "Clique no botão abaixo para atualizá-lo",
"the_process": "A atualização pode demorar vários minutos, aguarde ...",
"update_finished": "Atualização concluída, você será redirecionado ...",
"update_it": "Atualizar TinyCheck"
}
}

View File

@ -0,0 +1,89 @@
{
"home": {
"welcome_msg": "Добро пожаловать в TinyCheck.",
"help_msg": "Мы поможем вам проверить ваше устройство.",
"start_btn": "Итак, приступим!"
},
"analysis": {
"question": "Хотите проанализировать зафиксированные подключения?",
"no_btn": "Нет, только сохранить",
"yes_btn": "Да, проанализировать",
"please_wait_msg": "Подождите, идет анализ...",
"some_time_msg": "Это может занять некоторое время..."
},
"capture": {
"intercept_coms_msg": "Перехват подключений ",
"stop_btn": "Остановить сбор данных"
},
"generate-ap": {
"network_name": "Имя сети",
"network_password": "Пароль сети",
"tap_msg": "Нажмите на белую рамку, чтобы создать новую сеть.",
"generate_ap_msg": "Создастся временная сеть.",
"error_msg1": "<br>При создании точки доступа возникли проблемы.",
"error_msg2": "Убедитесь, что на вашем устройстве<br> есть два порта Wi-Fi, и повторите попытку, перезагрузив устройство.",
"restart_btn": "Перезагрузить устройство"
},
"report": {
"show_full_report": "Показать полный отчет",
"start_new_capture": "Начать новый сбор данных",
"save_capture": "Сохранить сбор данных",
"numbers": [
"ноль",
"один",
"два",
"три",
"четыре",
"пять",
"шесть",
"семь",
"восемь",
"девять",
"десять",
"одиннадцать"
],
"stalkerware_msg": "Ваше устройство взломано вредоносным<br /> ПО для слежки. Проверьте отчет.",
"location_msg": "Приложение передает вашу<br /> текущую геолокацию третьему лицу.",
"fine_msg": "Предупреждения отсутствуют,<br /> система выглядит защищенной.",
"high_msg": "У вас {nb} предупреждение высокого уровня.<br /> Вероятно,ваше устройство взломано.",
"moderate_msg": "У вас {nb} предупреждение среднего уровня.<br /> Возможно, ваше устройство взломано.",
"low_msg": "У вас {nb} предупреждение низкого уровня<br />, проверьте их.",
"save_report": "Сохранить отчет",
"report_of": "Отчет",
"ip_address": "IP-адрес",
"mac_address": "MAC-адрес",
"high": "высокий",
"moderate": "средний",
"low": "низкий"
},
"wifi-select": {
"already_connected_question": "Похоже, вы уже подключились к сети. <br>Использовать текущее подключение?",
"no_btn": "Нет, использовать другое.",
"yes_btn": "Да, использовать это.",
"wifi_name": "Имя сети Wi-Fi",
"refresh_btn": "Обновить список сетей",
"not_connected": "Похоже, вы не подключились к интернету.",
"please_config": "Настройте подключение по Wi-Fi.",
"lets_do_btn": "Да, настроить.",
"no_internet": "Использование без интернета",
"wifi_connected": "Подключено к сети Wi-Fi",
"wifi_not_connected": "Не подключено к сети Wi-Fi. Повторите попытку.",
"tap_keyboard": "Коснитесь виртуальной клавиатуры, чтобы начать",
"wifi_password": "Пароль Wi-Fi",
"connect_to_it": "Подключиться"
},
"save-capture": {
"please_connect": "Подсоедините USB-ключ, чтобы сохранить результат сбора данных.",
"we_are_saving": "Сохранение собранных данных.",
"tap_msg": "Коснитесь USB-ключа, чтобы начать новый сбор данных.",
"capture_download": "Начинается загрузка собранных данных...",
"start_capture_btn": "Начать новый сбор данных"
},
"update": {
"tinycheck_needs": "Доступно новое обновление TinyCheck",
"please_click": "Нажмите кнопку ниже, чтобы обновить его",
"the_process": "Обновление может занять несколько минут, подождите...",
"update_finished": "Обновление завершено, вы будете перенаправлены...",
"update_it": "Обновить TinyCheck"
}
}

View File

@ -8,6 +8,12 @@ export const i18n = new VueI18n({
fallbackLocale: 'en',
messages: {
'en': require('@/locales/en.json'),
'fr': require('@/locales/fr.json')
'fr': require('@/locales/fr.json'),
'es': require('@/locales/es.json'),
'cat': require('@/locales/cat.json'),
'ru': require('@/locales/ru.json'),
'pt': require('@/locales/pt.json'),
'it': require('@/locales/it.json'),
'de': require('@/locales/de.json')
}
})

View File

@ -25,8 +25,7 @@ export default {
question: true,
running: false,
check_alerts: false,
long_waiting: false,
translation: {}
long_waiting: false
}
},
props: {

View File

@ -29,8 +29,7 @@ export default {
loading: false,
stats_interval: false,
chrono_interval: false,
sparklines: false,
translation: {}
sparklines: false
}
},
props: {

View File

@ -55,8 +55,7 @@ export default {
interval: false,
error: false,
reboot_option: window.config.reboot_option,
attempts: 3,
translation: {}
attempts: 3
}
},
methods: {

View File

@ -1,6 +1,6 @@
<template>
<div class="center">
<h3 class="lobster">{{ $t("home.welcome_msg") }}</h3>
<h3 class="lobster">{{ $t("home.welcome_msg") }}<sup>{{current_version}}</sup></h3>
<p>{{ $t("home.help_msg") }}</p>
<button class="btn btn-primary" v-on:click="next()">{{ $t("home.start_btn") }}</button>
</div>
@ -14,7 +14,7 @@ export default {
props: { saved_ssid: String, list_ssids: Array, internet: Boolean },
data() {
return {
translation: {},
current_version:""
}
},
methods: {
@ -31,6 +31,10 @@ export default {
internet: internet } });
}
}
},
created: function() {
if ('current_version' in window)
this.current_version = window.current_version
}
}
</script>

View File

@ -99,8 +99,7 @@ export default {
name: 'report',
data() {
return {
results: true,
translation: {}
results: true
}
},
props: {

View File

@ -144,8 +144,7 @@ export default {
usb: false,
saved: false,
save_usb: false,
init: false,
translation: {}
init: false
}
},
props: {

View File

@ -20,7 +20,7 @@
},
methods: {
internet_check: function() {
axios.get('/api/network/status', { timeout: 10000 })
axios.get('/api/network/status', { timeout: 30000 })
.then(response => {
if (response.data.internet) this.internet = true
if (window.config.iface_out.charAt(0) == 'e') {
@ -32,7 +32,7 @@
.catch(err => (console.log(err)))
},
get_wifi_networks: function() {
axios.get('/api/network/wifi/list', { timeout: 10000 })
axios.get('/api/network/wifi/list', { timeout: 30000 })
.then(response => {
this.list_ssids = response.data.networks
this.goto_home();
@ -46,7 +46,7 @@
}
},
created: function() {
setTimeout(function () { this.internet_check(); }.bind(this), 1000);
setTimeout(function () { this.internet_check(); }.bind(this), 5000);
}
}
</script>

View File

@ -1,20 +1,11 @@
<template>
<div class="center">
<div v-if="update_possible">
<div v-if="update_available">
<p><span class="orange-strong">TinyCheck needs to be updated.</span><br />
<span v-if="!update_launched">Please click on the button below to update it.</span>
<span v-else>The process can take few minutes, please wait...</span>
</p>
<button class="btn btn-primary" :class="[ update_launched ? 'loading' : '' ]" v-on:click="launch_update()">Update it now</button>
</div>
<div v-else>
<p><span class="green-strong">Your TinyCheck instance is up-to-date!</span><br />You'll be redirected in few seconds.</p>
</div>
</div>
<div v-else>
<p><strong>You dont have Internet or the rights to update Tinycheck.</strong><br />You'll be redirected in few seconds.</p>
</div>
<p><strong>{{ $t("update.tinycheck_needs") }} ({{next_version}}).</strong><br />
<span v-if="!update_launched">{{ $t("update.please_click") }}</span>
<span v-if="update_launched&&!update_finished">{{ $t("update.the_process") }}</span>
<span v-if="update_launched&&update_finished" class="color-green"> {{ $t("update.update_finished") }}</span>
</p>
<button class="btn btn-primary" :class="[ update_launched ? 'loading' : '' ]" v-on:click="launch_update()" v-if="!update_finished">{{ $t("update.update_it") }}</button>
</div>
</template>
@ -26,30 +17,24 @@
data() {
return {
translation: {},
update_available: null,
update_possible: true,
update_launched: null,
check_interval: null
check_interval: null,
next_version: null,
current_version: null,
update_finished: false
}
},
methods: {
check_update: function() {
axios.get('/api/update/check', { timeout: 60000 })
check_version: function() {
axios.get('/api/update/get-version', { timeout: 60000 })
.then(response => {
console.log(response.data.status)
if(response.data.status) {
if(response.data.message == "A new version is available"){
this.update_available = true
this.update_possible = true
} else if (response.data.message == "This is the latest version"){
this.update_available = false
this.update_possible = true
if(response.data.current_version == window.next_version){
window.current_version = response.data.current_version
this.update_finished = true
clearInterval(this.check_interval);
setTimeout(function () { window.location.href = "/"; }.bind(this), 3000);
setTimeout(function () { window.location.href = "/"; }, 10000)
}
} else {
this.update_possible = false
setTimeout(function () { window.location.href = "/"; }.bind(this), 3000);
}
})
.catch(error => { console.log(error) });
@ -60,7 +45,7 @@
if(response.data.status) {
if(response.data.message == "Update successfully launched"){
this.update_launched = true
this.check_interval = setInterval(function(){ this.check_update(); }.bind(this), 3000);
this.check_interval = setInterval(function(){ this.check_version(); }.bind(this), 3000);
}
}
})
@ -68,7 +53,16 @@
}
},
created: function() {
this.check_update();
if ('next_version' in window && 'current_version' in window){
if (window.current_version != window.next_version){
this.next_version = window.next_version
this.current_version = window.current_version
} else {
window.location.href = "/";
}
} else {
window.location.href = "/";
}
}
}
</script>

View File

@ -72,8 +72,7 @@ export default {
virtual_keyboard: window.config.virtual_keyboard,
have_internet: false,
enter_creds: false,
refreshing: false,
translation: {}
refreshing: false
}
},
props: {

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -50,7 +50,8 @@ frontend:
sparklines: true
virtual_keyboard: true
user_lang: userlang
update: updateoption
# NETWORK -
# Some elements related to the network configuration, such as
# the interfaces (updated during the install), the list of SSIDs

View File

@ -6,7 +6,7 @@ HOST="$( hostname )"
IFACES="$( ifconfig -a | grep -Eo '[a-z0-9]{4,14}\: ' | grep -oE [a-z0-9]+ )"
IFACE_OUT=""
IFACE_IN=""
LOCALES=(en fr cat es)
LOCALES=(en fr cat es ru pt de it)
welcome_screen() {
cat << "EOF"
@ -51,7 +51,7 @@ set_userlang() {
if [[ " ${LOCALES[@]} " =~ " ${lang} " ]]; then
sed -i "s/userlang/${lang}/g" /usr/share/tinycheck/config.yaml
echo -e "\e[92m [✔] User language settled!\e[39m"
else
else
echo -e "\e[91m [✘] You must choose between the languages proposed, let's retry.\e[39m"
set_userlang
fi
@ -97,6 +97,19 @@ set_kioskmode() {
fi
}
set_update() {
echo -n "[?] Do you want to be able to update TinyCheck from the frontend interface? [Yes/No] "
read answer
if [[ "$answer" =~ ^([yY][eE][sS]|[yY])$ ]]
then
sed -i "s/updateoption/true/g" /usr/share/tinycheck/config.yaml
echo -e "\e[92m [✔] You'll be able to update it from the frontend!\e[39m"
else
sed -i "s/updateoption/false/g" /usr/share/tinycheck/config.yaml
echo -e "\e[92m [✔] You'll need to pass by the console script to update TinyCheck.\e[39m"
fi
}
create_directory() {
# Create the TinyCheck directory and move the whole stuff there.
echo -e "[+] Creating TinyCheck folder under /usr/share/"
@ -105,7 +118,7 @@ create_directory() {
}
get_version() {
git tag | tail -n 1 > /usr/share/tinycheck/VERSION
git tag | tail -n 1 | xargs echo -n > /usr/share/tinycheck/VERSION
}
generate_certificate() {
@ -118,7 +131,7 @@ create_services() {
# Create services to launch the two servers.
echo -e "\e[39m[+] Creating services\e[39m"
echo -e "\e[92m [✔] Creating frontend service\e[39m"
cat >/lib/systemd/system/tinycheck-frontend.service <<EOL
[Unit]
@ -187,10 +200,10 @@ WantedBy=multi-user.target
EOL
echo -e "\e[92m [✔] Enabling services\e[39m"
systemctl enable tinycheck-frontend &> /dev/null
systemctl enable tinycheck-backend &> /dev/null
systemctl enable tinycheck-kiosk &> /dev/null
systemctl enable tinycheck-watchers &> /dev/null
systemctl enable tinycheck-frontend &> /dev/null
systemctl enable tinycheck-backend &> /dev/null
systemctl enable tinycheck-kiosk &> /dev/null
systemctl enable tinycheck-watchers &> /dev/null
}
configure_dnsmask() {
@ -208,7 +221,7 @@ configure_dnsmask() {
interface=${IFACE_IN}
dhcp-range=192.168.100.2,192.168.100.3,255.255.255.0,24h
EOL
else
else
echo -e "\e[91m [✘] /etc/dnsmasq.conf doesn't exist, configuration not updated.\e[39m"
fi
}
@ -216,7 +229,7 @@ EOL
configure_dhcpcd() {
# Configure DHCPCD by appending few lines to his configuration.
# Allows to prevent the interface to stick to wpa_supplicant config.
echo -e "\e[39m[+] Configuring dhcpcd\e[39m"
echo -e "\e[92m [✔] Changing dhcpcd configuration\e[39m"
if [[ -f "/etc/dhcpcd.conf" ]]; then
@ -228,7 +241,7 @@ interface ${IFACE_IN}
static ip_address=192.168.100.1/24
nohook wpa_supplicant
EOL
else
else
echo -e "\e[91m [✘] /etc/dhcpcd.conf doesn't exist, configuration not updated.\e[39m"
fi
}
@ -269,11 +282,13 @@ install_package() {
apt-key add - < Release.key
rm Release.key && sudo apt-get update
apt-get install zeek -y
elif [[ $1 == "nodejs" ]]; then
curl -sL https://deb.nodesource.com/setup_12.x | bash
elif [[ $1 == "node" ]]; then
curl -sL https://deb.nodesource.com/setup_14.x | bash
apt-get install -y nodejs
elif [[ $1 == "dig" ]]; then
apt-get install -y dnsutils
elif [[ $1 == "pip" ]]; then
apt-get install -y python3-pip
fi
}
@ -287,7 +302,9 @@ check_dependencies() {
"/usr/bin/dig"
"/usr/bin/suricata"
"/usr/bin/unclutter"
"/usr/bin/sqlite3")
"/usr/bin/sqlite3"
"/usr/bin/pip"
"/usr/bin/node")
echo -e "\e[39m[+] Checking dependencies...\e[39m"
for bin in "${bins[@]}"
@ -299,8 +316,6 @@ check_dependencies() {
install_package ${bin##*/}
fi
done
echo -e "\e[39m[+] Install NodeJS...\e[39m"
install_package nodejs
echo -e "\e[39m[+] Install Python packages...\e[39m"
python3 -m pip install -r "$SCRIPT_PATH/assets/requirements.txt"
}
@ -314,6 +329,7 @@ compile_vuejs() {
create_desktop() {
# Create desktop icon to lauch TinyCheck in a browser
if [[ -d "/home/$CURRENT_USER/Desktop/" ]]; then
echo -e "\e[39m[+] Create Desktop icon under /home/${CURRENT_USER}/Desktop\e[39m"
cat >"/home/$CURRENT_USER/Desktop/tinycheck.desktop" <<EOL
#!/usr/bin/env xdg-open
@ -327,6 +343,7 @@ Name=TinyCheck
Comment=Launcher for the TinyCheck frontend
Icon=/usr/share/tinycheck/app/frontend/src/assets/icon.png
EOL
fi
}
cleaning() {
@ -341,7 +358,7 @@ cleaning() {
systemctl disable suricata.service &> /dev/null
# Removing some useless dependencies.
sudo apt autoremove -y &> /dev/null
sudo apt autoremove -y &> /dev/null
}
check_interfaces(){
@ -349,13 +366,13 @@ check_interfaces(){
# Get the current connected interface name.
ciface="$(route | grep default | head -1 | grep -Eo '[a-z0-9]+$')"
# Setup of iface_out which can be any interface,
# Setup of iface_out which can be any interface,
# but needs to be connected now or in the future.
echo -n "[?] The interface $ciface is connected. Do you want to use it as a bridge to Internet (network/out) ? [Yes/No] "
read answer
if [[ "$answer" =~ ^([yY][eE][sS]|[yY])$ ]]
then
IFACES=( "${IFACES[@]/$ciface}" )
IFACES=( "${IFACES[@]/$ciface}" )
IFACE_OUT=$ciface
echo -e "\e[92m [✔] $ciface settled as a bridge to the Internet\e[39m"
else
@ -368,14 +385,14 @@ check_interfaces(){
if [[ "$answer" =~ ^([yY][eE][sS]|[yY])$ ]]
then
IFACE_OUT=$iface
IFACES=( "${IFACES[@]/$iface}" )
IFACES=( "${IFACES[@]/$iface}" )
echo -e "\e[92m [✔] $iface settled as a bridge to the Internet\e[39m"
break
fi
done
fi
# Setup of iface_in which can be a only a
# Setup of iface_in which can be a only a
# Wi-Fi interface with AP mode available.
for iface in $IFACES;
do
@ -423,7 +440,7 @@ change_configs() {
}
feeding_iocs() {
echo -e "\e[39m[+] Feeding your TinyCheck instance with fresh IOCs and whitelist."
echo -e "\e[39m[+] Feeding your TinyCheck instance with fresh IOCs and whitelist, please wait."
python3 /usr/share/tinycheck/server/backend/watchers.py
}
@ -452,6 +469,7 @@ else
set_userlang
set_credentials
set_kioskmode
set_update
check_dependencies
configure_dnsmask
configure_dhcpcd
@ -466,4 +484,4 @@ else
feeding_iocs
cleaning
reboot_box
fi
fi

View File

@ -42,7 +42,7 @@ def require_header_token(f):
def decorated(*args, **kwargs):
try:
token = request.headers['X-Token']
jwt.decode(token, app.config["SECRET_KEY"])
jwt.decode(token, app.config["SECRET_KEY"], "HS256")
return f(*args, **kwargs)
except:
return jsonify({"message": "JWT verification failed"})
@ -58,7 +58,7 @@ def require_get_token(f):
def decorated(*args, **kwargs):
try:
token = request.args.get("token")
jwt.decode(token, app.config["SECRET_KEY"])
jwt.decode(token, app.config["SECRET_KEY"], "HS256")
return f(*args, **kwargs)
except:
return jsonify({"message": "JWT verification failed"})

View File

@ -34,7 +34,7 @@ def get_token():
"""
token = jwt.encode({"exp": datetime.datetime.now() +
datetime.timedelta(hours=24)}, app.config["SECRET_KEY"])
return jsonify({"token": token.decode("utf8")})
return jsonify({"token": token})
@app.route("/<p>/<path:path>", methods=["GET"])

View File

@ -13,6 +13,12 @@ def check():
return jsonify(Update().check_version())
@update_bp.route("/get-version", methods=["GET"])
def get_version():
""" Check the current version """
return jsonify(Update().get_current_version())
@update_bp.route("/process", methods=["GET"])
def process():
""" Check the presence of new version """

View File

@ -92,7 +92,8 @@ class Network(object):
net = {}
for line in block.splitlines():
if line and line != "}":
key, val = line.strip().split("=")
if "priority=10" not in line.strip():
key, val = line.strip().split("=")
if key != "disabled":
net[key] = val.replace("\"", "")
networks.append(net)
@ -100,13 +101,15 @@ class Network(object):
for net in networks:
if net["ssid"] == ssid:
net["psk"] = password.replace('"', '\\"')
net["priority"] = "10"
found = True
if not found:
networks.append({
"ssid": ssid,
"psk": password.replace('"', '\\"'),
"key_mgmt": "WPA-PSK"
"key_mgmt": "WPA-PSK",
"priority": "10"
})
with open("/etc/wpa_supplicant/wpa_supplicant.conf", "w+") as f:
@ -290,8 +293,15 @@ class Network(object):
try:
sp.Popen("echo 1 > /proc/sys/net/ipv4/ip_forward",
shell=True).wait()
# Enable forwarding.
sp.Popen(["iptables", "-A", "POSTROUTING", "-t", "nat", "-o",
self.iface_out, "-j", "MASQUERADE"]).wait()
# Prevent the device to reach the 80 and 443 of TinyCheck.
sp.Popen(["iptables", "-A", "INPUT", "-i", self.iface_in, "-d",
"192.168.100.1", "-p", "tcp", "--match", "multiport", "--dports", "80,443", "-j" "DROP"]).wait()
return True
except:
return False

View File

@ -20,7 +20,8 @@ class Update(object):
"""
Check if a new version of TinyCheck is available
by quering the Github api and comparing the last
tag with the VERSION file content.
tag inside the VERSION file.
:return: dict containing the available versions.
"""
if read_config(("frontend", "update")):
try:
@ -28,23 +29,44 @@ class Update(object):
res = json.loads(res.content.decode("utf8"))
with open(os.path.join(self.app_path, "VERSION")) as f:
if f.read() != res[0]["name"]:
cv = f.read()
if cv != res[0]["name"]:
return {"status": True,
"message": "A new version is available"}
"message": "A new version is available",
"current_version": cv,
"next_version": res[0]["name"]}
else:
return {"status": True,
"message": "This is the latest version"}
"message": "This is the latest version",
"current_version": cv}
except:
return {"status": False,
"message": "Something went wrong (no internet nor version file)"}
"message": "Something went wrong (no API access nor version file)"}
else:
return {"status": False,
"message": "You don't have rights to do this operation."}
def get_current_version(self):
"""
Get the current version of the TinyCheck instance
:return: dict containing the current version or error.
"""
if read_config(("frontend", "update")):
try:
with open(os.path.join(self.app_path, "VERSION")) as f:
return {"status": True,
"current_version": f.read()}
except:
return {"status": False,
"message": "Something went wrong - no version file ?"}
else:
return {"status": False,
"message": "You don't have rights to do this operation."}
def update_instance(self):
"""
Update the instance by executing
the update script.
Update the instance by executing the update script.
:return: dict containing the update status.
"""
if read_config(("frontend", "update")):
try:

View File

@ -61,6 +61,10 @@ elif [ $PWD = "/tmp/tinycheck" ]; then
sed -i 's/analysis:/analysis:\n active: true/g' /usr/share/tinycheck/config.yaml
fi
if ! grep -q update /usr/share/tinycheck/config.yaml; then
sed -i 's/frontend:/frontend:\n update: true/g' /usr/share/tinycheck/config.yaml
fi
if ! grep -q "CN=R3,O=Let's Encrypt,C=US" /usr/share/tinycheck/config.yaml; then
sed -i "s/free_issuers:/free_issuers:\n - CN=R3,O=Let's Encrypt,C=US/g" /usr/share/tinycheck/config.yaml
fi
@ -71,7 +75,7 @@ elif [ $PWD = "/tmp/tinycheck" ]; then
service tinycheck-watchers restart
echo "[+] Updating the TinyCheck version"
cd /tmp/tinycheck && git tag | tail -n 1 > /usr/share/tinycheck/VERSION
cd /tmp/tinycheck && git tag | tail -n 1 | xargs echo -n > /usr/share/tinycheck/VERSION
echo "[+] TinyCheck updated!"
fi