mdmaug.py 5.26 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118
#!/usr/local/bin/python3.4
'''
   MDM-Augmented.

   https://csirt.csirt.office.nic.cz:8000/rest/analyze/atlas.cz -> vsechny odkazy pro MDMko.

   Jak se instaluje? Python3. Pip. apt-get nainstaluje Xvfb a pip nainstaluje xvfbwrapper.
   Zajistim, ze na systemu bezi Firefox a nastavim mu pocet profilu, jaky chci. Podle toho upravim Config.profileCount.
   Lze otestovat, ze firefox prebira z prikazove radky parametry (muze se stat, ze je stane nastaveny zastupce v /usr/bin) pri vytvareni profilu: firefox -P

   V prohlizeci, kde pojede MDMko, se pro test pripojte na https://172.20.7.10:8000 a pridejte server mezi vyjimky. (Jinak  se prohlížeč nepřipojí a python vrátí SSLError - unknown ca.)
   Protoze MDM je pres https, je https i MDM-Augmented server. Vykaslal jsem se na certifikat, sam si jej podepsav. Zabte me.

   Zabezpecte, aby NoScript neblokoval csirt.csirt.office.nic.cz (ani 172.20.7.10).

   Jak ve FF vytvorit profily?
   * firefox -P je vsechny vytvorim, nazvu je cisly 0,1...
   * jeden profil nastavim (security - nechci zadny block ani safebrowsing warning)
   * about:config
        browser.sessionstore.resume_from_crash nastavit na false
        browser.sessionstore.max_resumed_crashes nastavit na -1
        toolkit.startup.max_resumed_crashes = -1 (protoze i kdyz prohlizec nekdy killnu, nesmi me pri spusteni otravovat gui popupem)
        network.http.accept-encoding = "" # ukladame streamy, ale neumim je rozzipovat
        extensions.autoDisableScopes = "0" # moznost instalovat ze vsech umisteni
        browser.selfsupport.url = "" # tato moznost normalne v about:config neni, ale omezuje to nejake zbytecnou telemetrii, viz Mozilla Heartbeat

        # nepamatovat si historii (Preferences / Privacy / Firefox will use custom settings for history / Clear history when closes / Setting / All)
        # nejsem si jist, nakolik to funguje, zrejme dost
        privacy.clearOnShutdown.offlineApps = true
        privacy.clearOnShutdown.passwords = true
        privacy.clearOnShutdown.siteSettings = true
        privacy.sanitize.didShutdownSanitize = true
        privacy.sanitize.sanitizeOnShutdown = true




   * mdmaug extension
        - cfx xpi vygeneruje 'mdmaug.xpi'
        - prejmenuju na zip 
        - do složky ~/.mozilla/extensions/mdmaug@jetpack (id tvori ještě přídomek @jetpack)
        - vkopiruju obsah slozky zipu xpi
        - prefs.js všech profilů obsahuje extensions.autoDisableScopes = "0"
   * tento profile pak zkopiruju do ostatnich slozek
     - about:config je v souboru prefs.js
     - profily jde bezpecne prejmenovat v souboru profiles.ini
     - chown: FF jede pod uzivatele mdmaug, ne pod rootem. Do Debianu se musi FF stahnout z taru. Pokud nemuze zapisovat do slozky pri vytvoreni profilu, zkusim chown mdmaug:mdmaug pro celou home slozku, nebo alespon chown mdmaug:mdmaug -hR .mozilla
     - Při jednorázovém updatu prefs.js - staci kdyz ho vkopiruju do složky profilu 0, správně nastavím cesty v /bin/profile_copy a spustím...

   * pozor na prava, kdyztak sudo chown -R mdmaug /home/mdmaug/
   
   Dependencies:
   pip3.4 install pymysql ... vono si to řekne


'''
import logging
logging.basicConfig(level=logging.DEBUG, format="%(message)s")
#logging.basicConfig(level=logging.WARNING, format="%(levelname)s: %(message)s",filename="logger.log")
from http.server import HTTPServer
import os
import ssl
#import traceback
#import pdb
from xvfbwrapper import Xvfb
import threading
from lib.config import Config
from lib.server import Server
#from lib.dbp import DbModel
from lib.rest import Rest

#from lib.dbp import Status, Export, Turris, Whitelist
#url = "http://stat.cz"
#print(Whitelist.select().count())
#quit()
#ip = "112.78.117.153"
#print(Turris.select().join(Status, on=(Status.id == Turris.status)).where(Turris.ip == ip).limit(1).get().id)
#status = Turris.select().join(Status, on=(Status.id == Turris.status)).where(Turris.ip == ip).limit(1).get().status
#print(status)
#Turris.select().where(Turris.id == 5).count()
#from urllib.parse import parse_qs
#from urllib.parse import urlparse
#quit()

vdisplay = Xvfb()
vdisplay.start()
#vdisplay.stop() #je divny, ze se browser spusti, prestoze je tenhle prikaz pred nim. zkus ho smazat XX                            

#zajistit loggovaci adresar dir
if not os.path.exists(Config.LOG_DIR):
    os.makedirs(Config.LOG_DIR)

#nastavit vicevlaknovy server
Rest.reset() #subprocess.call(["killall",browser]) #resetovat browsery
httpd = HTTPServer(('0.0.0.0', Config.APP_PORT), Server) #HTTPServer
httpd.socket = ssl.wrap_socket(httpd.socket,
                               server_side=True,
                               certfile='python.pem', #spojenej private + cert, http://stackoverflow.com/questions/19705785/python-3-https-webserver
                               ssl_version=ssl.PROTOCOL_TLSv1)

#spustit server
#DbModel.connect()
#httpd.serve_forever()
#for i in range(21): # Config.profileCount
for i in range(2): # Config.profileCount
    threading.Thread(target=httpd.serve_forever).start()
#DbModel.disconnect()


'''
debug mysql
conn = pymysql.connect(host='localhost', user='root', passwd='lopuch', db='mdmaug', charset='utf8')
cur = conn.cursor()
cur.execute("""SELECT name from turris JOIN status ON status.id = turris.status WHERE ip = %s""", (ip,))
vote = self.cur.fetchone()[0]            
print(vote)
exit()
'''