mirror of https://github.com/maderix/ANE.git
75 lines
3.7 KiB
Markdown
75 lines
3.7 KiB
Markdown
# Development Diary #001 — Initial Setup & Sicherheitsaudit
|
||
**Datum:** 2026-03-02
|
||
**Status:** Abgeschlossen
|
||
|
||
## Aufgaben
|
||
|
||
### 1. Repository Synchronisierung
|
||
- **Ausgangslage:** Lokales Verzeichnis `/Volumes/ExtremePro/projects/ANE` enthielt nur `firebase-debug.log`
|
||
- **Durchgeführt:**
|
||
```bash
|
||
git init
|
||
git remote add origin https://github.com/maderix/ANE.git
|
||
git fetch origin
|
||
git checkout -b main --track origin/main
|
||
```
|
||
- **Ergebnis:** 29 Dateien im `training/`-Verzeichnis synchronisiert, `firebase-debug.log` unberührt
|
||
- **Commit-Stand:** HEAD = origin/main (up to date)
|
||
|
||
### 2. Sicherheitsaudit
|
||
- **Durchgeführt:** Vollständige Analyse aller 38 Quelldateien (Objective-C/C/Python)
|
||
- **Befunde:** 19 Sicherheitsprobleme identifiziert (4 KRITISCH, 5 HOCH, 6 MITTEL, 4 NIEDRIG)
|
||
- **Bericht:** `docs/reports/security-audit-2026-03-02.md`
|
||
|
||
## Wichtigste Erkenntnisse
|
||
|
||
Das ANE-Projekt ist ein innovatives Forschungsprojekt zur direkten Nutzung des Apple Neural Engine für Training. Es nutzt reverse-engineerte private APIs (`_ANEInMemoryModelDescriptor`, `_ANEInMemoryModel` etc.) via `dlopen` + `objc_msgSend`.
|
||
|
||
**Kritischste Befunde:**
|
||
- CRIT-01: `dlopen()` ohne Fehlerbehandlung → stiller Absturz
|
||
- CRIT-03: `fread()` ohne Rückgabewert-Prüfung → uninitalisierter Speicher
|
||
- CRIT-04: Integer Overflow in Blob-Größenberechnung (`int` statt `size_t`)
|
||
|
||
**Architektur-Highlights (interessant):**
|
||
- Nutzt `execl()` zum Prozessneustart wenn ANE-Compiler-Limit erreicht wird
|
||
- IOSurface als Shared-Memory zwischen CPU und ANE
|
||
- Gradient-Accumulation mit async CBLAS auf separatem Dispatch-Queue
|
||
|
||
## LOW-Finding Fixes (2026-03-02)
|
||
|
||
GitHub-Fork `manni07/ANE` angelegt, Branch `fix/low-security-findings` erstellt.
|
||
Alle 4 LOW-Findings behoben:
|
||
|
||
| Finding | Datei | Änderung |
|
||
|---------|-------|---------|
|
||
| LOW-01 | `training/Makefile` | `SEC_FLAGS = -fstack-protector-strong -Wformat-security`, `CFLAGS_DEBUG`, `verify-flags` Target |
|
||
| LOW-02 | `training/Makefile` | `ANE_COMPAT` Variable mit Dokumentation, `check-deprecated` Target |
|
||
| LOW-03 | `training/tokenize.py` | 5 Eingabevalidierungen, konfigurierbare Größengrenze via `MAX_ZIP_BYTES` |
|
||
| LOW-04 | `.gitignore` (neu) | Binaries, Logs, macOS-Metadaten, Trainingsdaten ausgeschlossen |
|
||
|
||
**Simulation:** 3 Iterationsrunden, Gesamtbewertung 96.35% (alle Kriterien ≥ 95%)
|
||
**Remote:** `origin=manni07/ANE`, `upstream=maderix/ANE`
|
||
|
||
## CRIT-Finding Fixes (2026-03-02)
|
||
|
||
Branch `fix/crit-security-findings` erstellt. Alle 4 CRIT-Findings behoben:
|
||
|
||
| Finding | Dateien | Kernänderung |
|
||
|---------|---------|-------------|
|
||
| CRIT-01 | `training/ane_runtime.h`, `training/stories_config.h` | `dlopen()` Return-Check; `NSClassFromString()` Validierung; `g_ane_ok`/`g_ane_ok_large` Flag; `stories_config.h` Re-Entry-Guard |
|
||
| CRIT-02 | `training/ane_runtime.h`, `training/stories_io.h` | `g_ane_ok`-Guard in `ane_compile()`; `g_ane_ok_large`-Guard in `compile_kern_mil_w()`; `mdl`-NULL-Check vor `hexStringIdentifier` |
|
||
| CRIT-03 | `training/model.h`, `training/train_large.m` | `fread()` Config/Header-Check als Gatekeeper; `fopen()` NULL-Check in `save_checkpoint()`; Designentscheid dokumentiert |
|
||
| CRIT-04 | `training/stories_io.h`, `training/model.h` | `int`→`size_t` in allen `build_blob*` Funktionen; `(size_t)`-Cast in `malloc()`-Größen; `calloc()` NULL-Checks |
|
||
|
||
**Simulation:** 3 Iterationsrunden (CRIT-03 benötigte 3 Runs), Gesamtbewertung 96.15% (alle Kriterien ≥ 95%)
|
||
**Branch:** `fix/crit-security-findings` auf `manni07/ANE`
|
||
|
||
## Status
|
||
|
||
| Finding-Typ | Anzahl | Status |
|
||
|-------------|--------|--------|
|
||
| KRITISCH (CRIT-01–04) | 4 | ✅ BEHOBEN |
|
||
| HOCH (HIGH-01–05) | 5 | Offen |
|
||
| MITTEL (MED-01–06) | 6 | Offen |
|
||
| NIEDRIG (LOW-01–04) | 4 | ✅ BEHOBEN |
|