Add SSH host identity rotation controls
This commit is contained in:
@@ -0,0 +1,35 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Full production SSH security with real mbedTLS and fault-injected NVS/RTOS."""
|
||||
import ast
|
||||
import re
|
||||
from pathlib import Path
|
||||
import subprocess
|
||||
import tempfile
|
||||
ROOT = Path(__file__).resolve().parents[2]
|
||||
tree = ast.parse((ROOT / 'tests/web_security/run.py').read_text())
|
||||
headers = ast.literal_eval(next(n.value for n in tree.body if isinstance(n, ast.Assign) and any(isinstance(t, ast.Name) and t.id == 'HEADERS' for t in n.targets)))
|
||||
headers['freertos/FreeRTOS.h'] += '''
|
||||
typedef int portMUX_TYPE;
|
||||
#define portMUX_INITIALIZER_UNLOCKED 0
|
||||
void enter(void);
|
||||
void leave(void);
|
||||
#define taskENTER_CRITICAL(p) do { (void)(p); enter(); } while (0)
|
||||
#define taskEXIT_CRITICAL(p) do { (void)(p); leave(); } while (0)
|
||||
'''
|
||||
headers['freertos/task.h'] = '''#pragma once
|
||||
typedef void *TaskHandle_t;
|
||||
TaskHandle_t xTaskGetCurrentTaskHandle(void);
|
||||
void vTaskDelay(unsigned);
|
||||
'''
|
||||
with tempfile.TemporaryDirectory(prefix='ssh-security-') as directory:
|
||||
out = Path(directory)
|
||||
for name, text in headers.items():
|
||||
path = out / name
|
||||
path.parent.mkdir(parents=True, exist_ok=True)
|
||||
path.write_text(text)
|
||||
source = (ROOT/'src/ssh_transport.c').read_text()
|
||||
names = ('next_generation','request_running_locked','request_running','ssh_transport_start','ssh_transport_stop','ssh_transport_replace_identity','ssh_transport_replace_host_key')
|
||||
owner = ''.join(re.search(r'^(?:static )?[^\n]+\b'+name+r'\([^;]*?\n\{.*?^\}',source,re.M|re.S).group()+'\n' for name in names)
|
||||
(out/'owner.inc').write_text(re.search(r'^#define SSH_TRANSPORT_GENERATION_MAX .+$',source,re.M).group()+'\n'+owner)
|
||||
subprocess.run(['cc','-std=c11','-Wall','-Wextra','-Werror','-g','-I'+str(out),'-I'+str(ROOT/'src'),str(ROOT/'tests/ssh_management/security.c'),'-lmbedcrypto','-o',str(out/'test')],check=True,timeout=30)
|
||||
subprocess.run([str(out/'test')],check=True,timeout=30)
|
||||
Reference in New Issue
Block a user