Merge branch 'testing' of https://git.deck.sh/Interfaz/ff into testing
This commit is contained in:
		
							
								
								
									
										37
									
								
								auth.py
									
									
									
									
									
								
							
							
						
						
									
										37
									
								
								auth.py
									
									
									
									
									
								
							@@ -14,22 +14,25 @@ def login(config, user, password, sysid):
 | 
				
			|||||||
    ssh.sftp_send_data(config, filename, 'sendlogin')
 | 
					    ssh.sftp_send_data(config, filename, 'sendlogin')
 | 
				
			||||||
    command = "python3 login_service.py " + sysid
 | 
					    command = "python3 login_service.py " + sysid
 | 
				
			||||||
    ssh.run_ssh(config, command, 'scripts')
 | 
					    ssh.run_ssh(config, command, 'scripts')
 | 
				
			||||||
    sleep(1)
 | 
					 | 
				
			||||||
    filename = sysid + "success.txt"
 | 
					    filename = sysid + "success.txt"
 | 
				
			||||||
    output = ssh.check_for_file(config, filename, 'receivelogin')
 | 
					    count = 0
 | 
				
			||||||
    if output == False:
 | 
					    while count < 20:
 | 
				
			||||||
        filename = sysid + "fail.txt"
 | 
					        output = ssh.check_for_file(config, filename, 'receivelogin')
 | 
				
			||||||
        if ssh.check_for_file(config, filename, 'receivelogin') == False:
 | 
					        if output == False:
 | 
				
			||||||
            # ALERT: DIRTY HACK: SECURITY VULNERABILITY
 | 
					            filename = sysid + "fail.txt"
 | 
				
			||||||
            #return True
 | 
					            if ssh.check_for_file(config, filename, 'receivelogin') == False:
 | 
				
			||||||
            raise ValueError("Unable to determine login status")
 | 
					                # try again
 | 
				
			||||||
 | 
					                count += 1
 | 
				
			||||||
 | 
					                sleep(0.1)
 | 
				
			||||||
 | 
					                #raise ValueError("Unable to determine login status")
 | 
				
			||||||
 | 
					            else:
 | 
				
			||||||
 | 
					                return False
 | 
				
			||||||
        else:
 | 
					        else:
 | 
				
			||||||
            return False
 | 
					            fprint(type(output))
 | 
				
			||||||
    else:
 | 
					            if str(output).find("admin") >= 0 or str(output).find("Admin") >= 0:
 | 
				
			||||||
        fprint(type(output))
 | 
					                fprint("Authorized as admin!")
 | 
				
			||||||
        if str(output).find("admin") >= 0 or str(output).find("Admin") >= 0:
 | 
					                return True
 | 
				
			||||||
            fprint("Authorized as admin!")
 | 
					            else:
 | 
				
			||||||
            return True
 | 
					                fprint("Not admin")
 | 
				
			||||||
        else:
 | 
					                return False
 | 
				
			||||||
            fprint("Not admin")
 | 
					    return False
 | 
				
			||||||
            return False
 | 
					 | 
				
			||||||
							
								
								
									
										16
									
								
								block.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								block.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,16 @@
 | 
				
			|||||||
 | 
					from util import find_data_file
 | 
				
			||||||
 | 
					from util import setup_child
 | 
				
			||||||
 | 
					from util import fprint
 | 
				
			||||||
 | 
					from util import run_cmd
 | 
				
			||||||
 | 
					from util import win32
 | 
				
			||||||
 | 
					from util import linux
 | 
				
			||||||
 | 
					import util
 | 
				
			||||||
 | 
					import time
 | 
				
			||||||
 | 
					import csv
 | 
				
			||||||
 | 
					import ssh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def get_blocklist(config):
 | 
				
			||||||
 | 
					    setup_child()
 | 
				
			||||||
 | 
					    fprint("Downloading deny list from server")
 | 
				
			||||||
 | 
					    data = check_for_file(config, "BadIPs.csv", "receive")
 | 
				
			||||||
 | 
					    fprint(data.stdout)
 | 
				
			||||||
@@ -16,4 +16,5 @@ ui:
 | 
				
			|||||||
core:
 | 
					core:
 | 
				
			||||||
  autokill: false
 | 
					  autokill: false
 | 
				
			||||||
  localadmin: true
 | 
					  localadmin: true
 | 
				
			||||||
  interval: 10
 | 
					  interval: 10
 | 
				
			||||||
 | 
					  clockspeed: 20
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										27
									
								
								ippigeon.py
									
									
									
									
									
								
							
							
						
						
									
										27
									
								
								ippigeon.py
									
									
									
									
									
								
							@@ -14,7 +14,9 @@ import netstat
 | 
				
			|||||||
import ssh
 | 
					import ssh
 | 
				
			||||||
import auth
 | 
					import auth
 | 
				
			||||||
import panel
 | 
					import panel
 | 
				
			||||||
 | 
					import block
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					badapps = [756, 278670]
 | 
				
			||||||
displaydata = None
 | 
					displaydata = None
 | 
				
			||||||
settings = None
 | 
					settings = None
 | 
				
			||||||
netdata_res = None
 | 
					netdata_res = None
 | 
				
			||||||
@@ -80,6 +82,12 @@ def killall():
 | 
				
			|||||||
    fprint("Every child has been killed")
 | 
					    fprint("Every child has been killed")
 | 
				
			||||||
    os.kill(os.getpid(), 9) # dirty kill of self
 | 
					    os.kill(os.getpid(), 9) # dirty kill of self
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def kill(pid):
 | 
				
			||||||
 | 
					    setup_child()
 | 
				
			||||||
 | 
					    fprint("Killing PID " + str(pid))
 | 
				
			||||||
 | 
					    #os.kill(pid, 9)
 | 
				
			||||||
 | 
					    fprint("Signal 9 sent to PID " + str(pid))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def mainloop(pool):
 | 
					def mainloop(pool):
 | 
				
			||||||
    # worker pool: netstat, netstat cleanup, upload, download, ui tasks
 | 
					    # worker pool: netstat, netstat cleanup, upload, download, ui tasks
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
@@ -123,13 +131,23 @@ def mainloop(pool):
 | 
				
			|||||||
        #fprint(auth.login(config, settings["username"], settings["password"], sysid))
 | 
					        #fprint(auth.login(config, settings["username"], settings["password"], sysid))
 | 
				
			||||||
        settings["login"] = False
 | 
					        settings["login"] = False
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
         
 | 
					    
 | 
				
			||||||
 | 
					    if settings["block"] == True:
 | 
				
			||||||
 | 
					        blockdata_res = pool.apply_async(block.get_blocklist, (config,)) #, callback=blockdata_done)
 | 
				
			||||||
 | 
					        settings["block"] = False
 | 
				
			||||||
 | 
					    #fprint(settings["killbox"])
 | 
				
			||||||
 | 
					    if len(settings["killbox"]) > 0:
 | 
				
			||||||
 | 
					        fprint("Kill opportunity!")
 | 
				
			||||||
 | 
					        for proc in settings["killbox"]:
 | 
				
			||||||
 | 
					            pool.apply_async(kill, (proc,))
 | 
				
			||||||
 | 
					            settings["killbox"].remove(proc)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    sleep(interval / (interval * 20.0))
 | 
					    sleep(interval / (interval * config["core"]["clockspeed"]))
 | 
				
			||||||
    counter += 1
 | 
					    counter += 1
 | 
				
			||||||
    if counter == interval * 20:
 | 
					    if counter == interval * config["core"]["clockspeed"]:
 | 
				
			||||||
        counter = 0
 | 
					        counter = 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class Logger(object):
 | 
					class Logger(object):
 | 
				
			||||||
    def __init__(self, filename="output.log"):
 | 
					    def __init__(self, filename="output.log"):
 | 
				
			||||||
        self.log = open(filename, "a")
 | 
					        self.log = open(filename, "a")
 | 
				
			||||||
@@ -168,6 +186,9 @@ if __name__ == '__main__':
 | 
				
			|||||||
            settings["loggedin"] = False
 | 
					            settings["loggedin"] = False
 | 
				
			||||||
            settings["showui"] = False
 | 
					            settings["showui"] = False
 | 
				
			||||||
            settings["continueui"] = False
 | 
					            settings["continueui"] = False
 | 
				
			||||||
 | 
					            settings["killbox"] = list()
 | 
				
			||||||
 | 
					            settings["badapps"] = badapps
 | 
				
			||||||
 | 
					            settings["block"] = True
 | 
				
			||||||
            killme = manager.Value('d', 0)
 | 
					            killme = manager.Value('d', 0)
 | 
				
			||||||
            #killme = False
 | 
					            #killme = False
 | 
				
			||||||
            # launch background UI app as process
 | 
					            # launch background UI app as process
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										453459
									
								
								output.log
									
									
									
									
									
								
							
							
						
						
									
										453459
									
								
								output.log
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										32
									
								
								panel.py
									
									
									
									
									
								
							
							
						
						
									
										32
									
								
								panel.py
									
									
									
									
									
								
							@@ -10,7 +10,8 @@ from util import find_data_file
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
BG_IMG = 'icon.png'
 | 
					BG_IMG = 'icon.png'
 | 
				
			||||||
filename = sysid + "gendata.csv"
 | 
					filename = sysid + "gendata.csv"
 | 
				
			||||||
COLUMN_NAMES = np.flip(['Executable', 'Protocol', 'Source IP', 'Destination IP',  'Status', 'PID'])
 | 
					COLUMN_NAMES = np.flip(['Executable', 'Proto', 'Source IP', 'Destination IP',  'Status', 'PID'])
 | 
				
			||||||
 | 
					COLUMN_SIZES = np.flip([150, 50, 200, 200, 110, 65])
 | 
				
			||||||
TEST_FILE = None
 | 
					TEST_FILE = None
 | 
				
			||||||
 | 
					
 | 
				
			||||||
displaydata = None
 | 
					displaydata = None
 | 
				
			||||||
@@ -81,7 +82,7 @@ class LoginPanel(wx.Panel):
 | 
				
			|||||||
        settings["username"] = basicText.GetValue()
 | 
					        settings["username"] = basicText.GetValue()
 | 
				
			||||||
        settings["password"] = pwdText.GetValue()
 | 
					        settings["password"] = pwdText.GetValue()
 | 
				
			||||||
        settings["login"] = True
 | 
					        settings["login"] = True
 | 
				
			||||||
        OtherFrame()
 | 
					        #OtherFrame()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def on_help(self, event):
 | 
					    def on_help(self, event):
 | 
				
			||||||
        HelpFrame()
 | 
					        HelpFrame()
 | 
				
			||||||
@@ -120,7 +121,7 @@ class HelpPanel(wx.Panel):
 | 
				
			|||||||
class ServerPanel(wx.Panel):
 | 
					class ServerPanel(wx.Panel):
 | 
				
			||||||
    def __init__(self, parent):
 | 
					    def __init__(self, parent):
 | 
				
			||||||
        super().__init__(parent, size=(500, 500))
 | 
					        super().__init__(parent, size=(500, 500))
 | 
				
			||||||
        self.SetBackgroundColour((44, 51, 51))
 | 
					        #self.SetBackgroundColour((44, 51, 51))
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        main_sizer = wx.BoxSizer(wx.VERTICAL)
 | 
					        main_sizer = wx.BoxSizer(wx.VERTICAL)
 | 
				
			||||||
        secondary_sizer = wx.BoxSizer(wx.HORIZONTAL)
 | 
					        secondary_sizer = wx.BoxSizer(wx.HORIZONTAL)
 | 
				
			||||||
@@ -131,17 +132,30 @@ class ServerPanel(wx.Panel):
 | 
				
			|||||||
        )
 | 
					        )
 | 
				
			||||||
        tb = wx.ToolBar( self, -1)
 | 
					        tb = wx.ToolBar( self, -1)
 | 
				
			||||||
        self.ToolBar = tb
 | 
					        self.ToolBar = tb
 | 
				
			||||||
 | 
					        tb.SetToolBitmapSize(wx.Size(30, 3))
 | 
				
			||||||
        tb.AddTool(wx.ID_ANY, '',wx.Bitmap(find_data_file("WXPython_30x30.png")),) 
 | 
					        tb.AddTool(wx.ID_ANY, '',wx.Bitmap(find_data_file("WXPython_30x30.png")),) 
 | 
				
			||||||
        tb.AddTool(wx.ID_ANY, '',wx.Bitmap(find_data_file("settings_30x30.png"))) 
 | 
					        tb.AddTool(wx.ID_ANY, '',wx.Bitmap(find_data_file("settings_30x30.png"))) 
 | 
				
			||||||
        tb.Realize() 
 | 
					        tb.Realize() 
 | 
				
			||||||
        main_sizer.Add(tb)
 | 
					        main_sizer.Add(tb)
 | 
				
			||||||
 | 
					        #main_sizer.SetBackgroundColour((44, 51, 51))
 | 
				
			||||||
        # self.pnl1.SetBackgroundColour(wx.BLACK)
 | 
					        # self.pnl1.SetBackgroundColour(wx.BLACK)
 | 
				
			||||||
        self.handle_columns()
 | 
					        self.handle_columns()
 | 
				
			||||||
 | 
					        global settings
 | 
				
			||||||
        for i in range(len(TEST_FILE)):
 | 
					        for i in range(len(TEST_FILE)):
 | 
				
			||||||
            self.list_ctrl.InsertItem(i, TEST_FILE.iloc[i, 0])
 | 
					            self.list_ctrl.InsertItem(i, TEST_FILE.iloc[i, 0])
 | 
				
			||||||
 | 
					            #fprint(TEST_FILE.iloc[i, 5] + " in " + str(settings["badapps"]))
 | 
				
			||||||
 | 
					            #if TEST_FILE.iloc[i, 5] in settings["badapps"]:
 | 
				
			||||||
 | 
					            for pid in settings["badapps"]:
 | 
				
			||||||
 | 
					                #fprint(pid)
 | 
				
			||||||
 | 
					                if str(TEST_FILE.iloc[i, 5]) == str(pid):
 | 
				
			||||||
 | 
					                    #fprint("Got " + TEST_FILE.iloc[i, 5])
 | 
				
			||||||
 | 
					                    settings["killbox"].append(pid)
 | 
				
			||||||
 | 
					                    fprint(settings["killbox"])
 | 
				
			||||||
 | 
					                    self.list_ctrl.SetItemBackgroundColour(i, wx.Colour(200, 51, 51))
 | 
				
			||||||
            for j in range(1, 6):
 | 
					            for j in range(1, 6):
 | 
				
			||||||
                 self.list_ctrl.SetItem(i, j, str(TEST_FILE.iloc[i, j]))
 | 
					                self.list_ctrl.SetItem(i, j, str(TEST_FILE.iloc[i, j]))
 | 
				
			||||||
                 #fprint(i, j, TEST_FILE.iloc[i, j])
 | 
					                
 | 
				
			||||||
 | 
					                #fprint(i, j, TEST_FILE.iloc[i, j])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        main_sizer.Add(self.list_ctrl, 0, wx.ALL | wx.EXPAND, 20)
 | 
					        main_sizer.Add(self.list_ctrl, 0, wx.ALL | wx.EXPAND, 20)
 | 
				
			||||||
        start_button = wx.Button(self, label='Start')
 | 
					        start_button = wx.Button(self, label='Start')
 | 
				
			||||||
@@ -156,13 +170,13 @@ class ServerPanel(wx.Panel):
 | 
				
			|||||||
        # wx.BORDER(stop_button, wx.BORDER_NONE)
 | 
					        # wx.BORDER(stop_button, wx.BORDER_NONE)
 | 
				
			||||||
        stop_button.Bind(wx.EVT_BUTTON, self.on_edit)
 | 
					        stop_button.Bind(wx.EVT_BUTTON, self.on_edit)
 | 
				
			||||||
        main_sizer.Add(start_button, 0, wx.CENTER | wx.ALL | 100, 5)
 | 
					        main_sizer.Add(start_button, 0, wx.CENTER | wx.ALL | 100, 5)
 | 
				
			||||||
        main_sizer.Add(stop_button, 0, wx.CENTER | 100, 5)
 | 
					        main_sizer.Add(stop_button, 0, wx.CENTER | wx.ALL | 100, 5)
 | 
				
			||||||
        main_sizer.Add(secondary_frame_button, 0, wx.CENTER | 100, 5)
 | 
					        main_sizer.Add(secondary_frame_button, 0, wx.CENTER | wx.ALL | 100, 5)
 | 
				
			||||||
        self.SetSizer(main_sizer)
 | 
					        self.SetSizer(main_sizer)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def handle_columns(self):
 | 
					    def handle_columns(self):
 | 
				
			||||||
        for col in COLUMN_NAMES:
 | 
					        for col in range(len(COLUMN_NAMES)):
 | 
				
			||||||
            self.list_ctrl.InsertColumn(0, col, width=200)
 | 
					            self.list_ctrl.InsertColumn(0, COLUMN_NAMES[col], width=COLUMN_SIZES[col])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										4
									
								
								setup.py
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								setup.py
									
									
									
									
									
								
							@@ -5,7 +5,7 @@ debug = True
 | 
				
			|||||||
#debug = not debug
 | 
					#debug = not debug
 | 
				
			||||||
# Dependencies are automatically detected, but it might need fine tuning.
 | 
					# Dependencies are automatically detected, but it might need fine tuning.
 | 
				
			||||||
# "packages": ["os"] is used as example only
 | 
					# "packages": ["os"] is used as example only
 | 
				
			||||||
build_exe_options = {"packages": ["os"], "excludes": ["tkinter"], "include_msvcr": True, "include_files": ["icon.png", "config.yml", "keyfile-admin.pem"], "optimize": 2}
 | 
					build_exe_options = {"packages": ["os"], "excludes": ["tkinter"], "include_msvcr": True, "include_files": ["icon.png", "config.yml", "keyfile-admin.pem", "WXPython.png", "WXPython_30x30.png", "settings.png", "settings_30x30.png"], "optimize": 1}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# base="Win32GUI" should be used only for Windows GUI app
 | 
					# base="Win32GUI" should be used only for Windows GUI app
 | 
				
			||||||
base = None
 | 
					base = None
 | 
				
			||||||
@@ -23,4 +23,4 @@ setup(
 | 
				
			|||||||
    description="IP Pigeon client application",
 | 
					    description="IP Pigeon client application",
 | 
				
			||||||
    options={"build_exe": build_exe_options},
 | 
					    options={"build_exe": build_exe_options},
 | 
				
			||||||
    executables=[Executable("ippigeon.py", base=base, icon="icon.ico", uac_admin=True, target_name=name)],
 | 
					    executables=[Executable("ippigeon.py", base=base, icon="icon.ico", uac_admin=True, target_name=name)],
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user