Psyzkaller: Learning from Historical and On-the-Fly Execution Data for Smarter Seed Generation in OS kernel Fuzzing
Liu, Zhang, Cheng et al.
Fuzzing has become a cornerstone technique for uncovering vulnerabilities and enhancing the security of OS kernels. However, state-of-the-art kernel fuzzers, including the de facto standard Syzkaller, struggle to generate valid syscall sequences that respect implicit Syscall Dependency Relations (SDRs). Consequently, many generated seeds either fail kernel validation or cannot penetrate deep execution paths, resulting in significant inefficiency.
We hypothesize that SDRs can be effectively learned from both historic and present kernel execution data, and that incorporating these learned relations into fuzzing can substantially improve seed validity and diversity. To validate this, we propose an approach that utilizes the N-gram model to mine SDRs from the Dongting dataset-one of the largest Linux kernel execution datasets available-as well as from execution traces collected on the fly during fuzzing. The resulting model is used to continuously augment the Choice Table of Syzkaller to improve its seed generation and demonstrably increases the Shannon Entropy of the Choice Table throughout fuzzing, reflecting more empirically-grounded choices in expanding syscall sequences into valid and diverse seeds. In addition, we introduce a Random Walk strategy that instructs Syzkaller to construct seeds in a bidirectional manner to further diversify the generated seeds.
We implement our approach in a prototype, Psyzkaller, built on top of Syzkaller. Experiments on three representative Linux kernel versions show that Psyzkaller improves Syzkaller's code coverage by 4.6%-7.0% in 48-hour fuzzing, while triggering 110.4%-187.2% more crashes. Moreover, our investigation shows that Psyzkaller discovered eight previously unknown kernel vulnerabilities, compared to only one found by Syzkaller.
academic
Psyzkaller: Aprendizaje de Datos de Ejecución Históricos y en Tiempo Real para Generación Inteligente de Semillas en Fuzzing de Núcleo del SO
El fuzzing se ha convertido en una tecnología fundamental para descubrir vulnerabilidades en núcleos de sistemas operativos y mejorar la seguridad. Sin embargo, los fuzadores de núcleo más avanzados, incluyendo el estándar de facto Syzkaller, enfrentan dificultades para generar secuencias de llamadas al sistema efectivas que respeten las relaciones de dependencia de llamadas al sistema implícitas (SDRs). Por consiguiente, muchas semillas generadas fallan en la validación del núcleo o no pueden ejecutar rutas profundas, resultando en ineficiencia significativa. Este artículo postula que las SDRs pueden aprenderse efectivamente de datos históricos y actuales de ejecución del núcleo, y que incorporar estas relaciones aprendidas en el fuzzing puede mejorar significativamente la validez y diversidad de las semillas. Para verificar esto, los autores proponen un método que utiliza modelos N-gram para extraer SDRs del conjunto de datos DongTing (uno de los mayores conjuntos de datos de ejecución del núcleo Linux) así como de trazas de ejecución recopiladas en tiempo real durante el proceso de fuzzing.
El núcleo del sistema operativo es un componente crítico de las plataformas informáticas modernas, y un compromiso de seguridad a nivel de núcleo permite a los atacantes obtener control total del sistema. Los problemas centrales enfrentados por los fuzadores de núcleo actuales son:
Dificultad en la Identificación de Relaciones de Dependencia de Llamadas al Sistema (SDRs): Muchas secuencias de llamadas al sistema (SCS) generadas son inválidas por violar SDRs
Baja Eficiencia en la Generación de Semillas: Los casos de prueba inválidos fallan prematuramente, contribuyendo poco a la exploración de código
Dificultad para Alcanzar Rutas de Ejecución Profundas: Falta de comprensión de restricciones semánticas entre llamadas al sistema
Los autores proponen una nueva perspectiva de aprender SDRs directamente de trazas de ejecución del núcleo, combinando la cobertura amplia de datos históricos con la adaptabilidad del aprendizaje en línea.
Propone una nueva estrategia que combina aprendizaje de SDRs de datos históricos y de ejecución del núcleo en tiempo real, con cobertura amplia y adaptabilidad a versiones del núcleo
Desarrolla el prototipo Psyzkaller, integrando aprendizaje de SDRs basado en Bigram y estrategia RandomWalk en el flujo de trabajo de Syzkaller
Preentrenamiento del modelo Bigram utilizando el mayor conjunto de datos histórico de ejecución del núcleo Linux (DongTing)
Valida la efectividad en tres versiones representativas del núcleo Linux, demostrando superioridad en cobertura de ramas y detección de vulnerabilidades
Entrada: Conjunto de datos histórico de ejecución del núcleo C y resultados de fuzzing en tiempo real
Salida: Tabla de Elección mejorada para guiar la generación más efectiva de secuencias de llamadas al sistema
Objetivo: Mejorar la validez de semillas, diversidad y capacidad de descubrimiento de vulnerabilidades
Se construye la matriz RPM, donde RPM[i]j registra la probabilidad de que la llamada al sistema wj se invoque inmediatamente después de wi.
Algoritmo 1: LearnSDR
Entrada: C (corpus de secuencias de llamadas al sistema), CallNum (número total de llamadas al sistema en el núcleo)
Salida: M (modelo N-gram aprendido de C)
1. Inicializar matriz M y matriz de conteo Count
2. Iterar sobre cada secuencia sc en el corpus C:
- Contar pares de llamadas al sistema que aparecen consecutivamente
- Actualizar estadísticas de conteo
3. Calcular probabilidades de transición: M[i][j] = M[i][j] / Count[i]
Fusión de Datos de Dos Fuentes: Primera integración sistemática de datos históricos a gran escala y aprendizaje en tiempo real
Mejora de Entropía de Shannon: Aumento significativo de la entropía de Shannon de la Tabla de Elección (de 1.50 a 3.30-3.50 bits) mediante aprendizaje de SDRs
Estrategia de Equilibrio de Pesos: Equilibrio configurable del impacto de trazas normales y anómalas
Generación de Semillas Bidireccional: La estrategia RandomWalk supera las limitaciones de extensión unidireccional tradicional
Limitaciones de Dependencia Semántica: Las relaciones de llamadas al sistema consecutivas capturadas por Bigram no siempre corresponden a dependencias semánticas verdaderas
Evolución de Versiones del Núcleo: La validez de datos históricos en nuevas versiones del núcleo puede disminuir
Complejidad Computacional: La complejidad de N-gram crece exponencialmente con N
El artículo cita 44 referencias relacionadas, abarcando:
Herramientas de fuzzing de núcleo (Syzkaller, Healer, etc.)
Métodos de aprendizaje automático (N-gram, Word2Vec, Transformers)
Conjuntos de datos de ejecución del núcleo (DongTing, ADFA-LD, etc.)
Métodos de extracción de relaciones de dependencia de llamadas al sistema
Evaluación General: Este es un artículo de investigación de seguridad de sistemas de alta calidad que propone un método innovador impulsado por datos para resolver problemas clave en fuzzing de núcleo. El diseño experimental es riguroso, los resultados son convincentes y posee importante valor académico y práctico significativo.