added big brother event auditor
This commit is contained in:
		
							parent
							
								
									bb87bc192e
								
							
						
					
					
						commit
						47e69bab99
					
				
					 5 changed files with 107 additions and 8 deletions
				
			
		
							
								
								
									
										43
									
								
								src/bigbrother/__init__.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								src/bigbrother/__init__.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,43 @@ | |||
| """ | ||||
|     Onionr - Private P2P Communication | ||||
| 
 | ||||
|     Processes interpreter hook events to detect security leaks | ||||
| """ | ||||
| import sys | ||||
| from typing import Iterable | ||||
| 
 | ||||
| from onionrexceptions import PythonVersion | ||||
| from . import ministry | ||||
| """ | ||||
|     This program is free software: you can redistribute it and/or modify | ||||
|     it under the terms of the GNU General Public License as published by | ||||
|     the Free Software Foundation, either version 3 of the License, or | ||||
|     (at your option) any later version. | ||||
| 
 | ||||
|     This program is distributed in the hope that it will be useful, | ||||
|     but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|     GNU General Public License for more details. | ||||
| 
 | ||||
|     You should have received a copy of the GNU General Public License | ||||
|     along with this program.  If not, see <https://www.gnu.org/licenses/>. | ||||
| """ | ||||
| 
 | ||||
| 
 | ||||
| def _auditing_supported(): | ||||
|     try: | ||||
|         sys.audit | ||||
|         sys.addaudithook | ||||
|     except AttributeError: | ||||
|         raise PythonVersion('Auditing not supported interpreter') | ||||
| 
 | ||||
| 
 | ||||
| def sys_hook_entrypoint(event, info): | ||||
|     if event == 'socket.connect': | ||||
|         ministry.ofcommunication.detect_socket_leaks(info) | ||||
| 
 | ||||
| 
 | ||||
| def enable_ministries(disable_hooks: Iterable = []): | ||||
|     """Enable auditors""" | ||||
|     _auditing_supported()  # raises PythonVersion exception if <3.8 | ||||
|     sys.addaudithook(sys_hook_entrypoint) | ||||
							
								
								
									
										1
									
								
								src/bigbrother/ministry/__init__.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								src/bigbrother/ministry/__init__.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1 @@ | |||
| from . import ofcommunication | ||||
							
								
								
									
										38
									
								
								src/bigbrother/ministry/ofcommunication.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								src/bigbrother/ministry/ofcommunication.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,38 @@ | |||
| """ | ||||
|     Onionr - Private P2P Communication | ||||
| 
 | ||||
|     Ensure sockets don't get made to non localhost | ||||
| """ | ||||
| import ipaddress | ||||
| 
 | ||||
| import logger | ||||
| """ | ||||
|     This program is free software: you can redistribute it and/or modify | ||||
|     it under the terms of the GNU General Public License as published by | ||||
|     the Free Software Foundation, either version 3 of the License, or | ||||
|     (at your option) any later version. | ||||
| 
 | ||||
|     This program is distributed in the hope that it will be useful, | ||||
|     but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|     GNU General Public License for more details. | ||||
| 
 | ||||
|     You should have received a copy of the GNU General Public License | ||||
|     along with this program.  If not, see <https://www.gnu.org/licenses/>. | ||||
| """ | ||||
| 
 | ||||
| 
 | ||||
| def detect_socket_leaks(socket_event): | ||||
|     """is called by the big brother broker whenever | ||||
|     a socket connection happens. | ||||
|     raises exception & logs if not to loopback | ||||
|     """ | ||||
|     ip_address = socket_event[1][0] | ||||
| 
 | ||||
|     # validate is valid ip address (no hostname, etc) | ||||
|     # raises valueerror if not | ||||
|     ipaddress.ip_address(ip_address) | ||||
| 
 | ||||
|     if not ip_address.startswith('127'): | ||||
|         logger.warn(f'Conn made to {ip_address} outside of Tor/similar') | ||||
|         raise ValueError('Conn to non loopback IP, this is a privacy concern!') | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue