Wat is het SER-bestandsformaat?
Een .ser-bestand bevat een Java serialized object stream - een binaire codering van een of meer Java-objecten geproduceerd door ObjectOutputStream en teruggelezen door ObjectInputStream. Het formaat werd geïntroduceerd met Java 1.1 in 1997 en is gedefinieerd in de Java Object Serialization Specification.
Elk geldig .ser-bestand begint met de 4-byte magic sequence AC ED 00 05: bytes 0-1 bevatten STREAM_MAGIC (0xACED) en bytes 2-3 bevatten STREAM_VERSION (0x0005). De stream codeert de klassedescriptor, velden en geneste gegevens van elk object met behulp van getypeerde blokmarkeringen: TC_OBJECT (0x73), TC_CLASS (0x76), TC_ARRAY (0x75), TC_STRING (0x74), en TC_NULL (0x70).
Serialisatie werd veel gebruikt voor het cachen van de applicatiestatus, het doorgeven van objecten tussen JVM's en het opslaan van configuratiegegevens. Echter, Java-deserialisatie is een bekend beveiligingslek - kwaadwillig samengestelde streams kunnen gadget-ketens in het classpath misbruiken om remote code execution te bereiken. Java 9 introduceerde ObjectInputFilter om te beperken welke klassen mogen worden gedeserialiseerd, en moderne Java-richtlijnen raden het gebruik van .ser-bestanden voor niet-vertrouwde gegevens ten zeerste af.
De voorkeur genietende moderne alternatieven zijn JSON (via Jackson of Gson), Protocol Buffers, of Kryo. GeneMapper (Thermo Fisher Scientific) gebruikt .ser-bestanden voor bio-informatica projectgegevens. Het hulpprogramma SerializationDumper kan de inhoud van .ser inspecteren zonder deze uit te voeren.
Beveiliging & veiligheid
RISICO: HIGHJava-deserialisatie is een van de meest ernstige aanvalsoppervlakken in Java-applicaties (historisch OWASP Top 10). Het openen van een niet-vertrouwd .ser-bestand in een kwetsbare applicatie kan willekeurige code uitvoeren via gadget-ketens (zie de Apache Commons Collections exploit, 2015). Eindgebruikers mogen alleen .ser-bestanden openen van vertrouwde bronnen en in de daarvoor bestemde applicatie. Voor het analyseren van onbekende .ser-bestanden: gebruik SerializationDumper (statische dump, voert de payload niet uit) in plaats van ze te deserialiseren in een actieve JVM.
Formaatdetails
in een notendop- GeneMapper Projectbestand - Applied Biosystems/Life Technologies GeneMapper-software gebruikt .ser als zijn eigen container voor projectgegevens.
- Generieke applicatiegegevenscache - Elke Java-applicatie kan willekeurige objecten serialiseren naar .ser; de inhoud is volledig applicatiespecifiek.
Programma's die SER-bestanden openen
Technische details
diepe specificaties| Magic bytes | AC ED 00 05 op offset 0 - STREAM_MAGIC (0xACED) gevolgd door STREAM_VERSION (0x0005) |
| Codering | Binair, big-endian |
| MIME-type | application/x-java-serialized-object |
| Serialisatie-API | java.io.ObjectOutputStream (schrijven) / java.io.ObjectInputStream (lezen); klassen moeten java.io.Serializable implementeren |
| Protocolversie | Serialisatieprotocol versie 2 (streamversie 5), stabiel sinds Java 1.2 |
| Klasse-versiebeheer | Elke klasse bevat een serialVersionUID; een versie-mismatch gooit een InvalidClassException tijdens deserialisatie |
| Inhoudsmarkeringen | TC_OBJECT (0x73), TC_CLASS (0x76), TC_ARRAY (0x75), TC_STRING (0x74), TC_NULL (0x70) |
| Beveiligingsrisico | Bekende aanvalsvector voor deserialisatie-gadget-ketens; Java 9+ beperkt dit via ObjectInputFilter klassen-allowlisting |
| Typische grootte | Enkele bytes voor eenvoudige objecten tot honderden MB voor grote geserialiseerde objectgrafieken |
| Platform-portabiliteit | Leesbaar door elke JVM op Windows, Linux, of macOS; niet draagbaar buiten het Java-ecosysteem |
| Stream-compressie | Ongecomprimeerd op formaatniveau; GZIPOutputStream-wrapping wordt optioneel toegepast op de applicatielaag |
| Integriteit | Geen ingebouwde checksum; integriteit wordt geboden door ondertekening op applicatieniveau of beveiligd transport |
| Bekende applicatie | GeneMapper (Thermo Fisher Scientific) gebruikt .ser voor bio-informatica project- en gegevensbestanden |
| Uitgebracht | 1997 (Java 1.1, JDK 1.1) |
| Laatste versie | Stream version 5 (serialization protocol version 2, since Java 1.2) |
| Open standaard | Ja · royaltyvrij |
| Specificatie | docs.oracle.com |
SER conversies
Community V&A
gevraagd door gebruikersNog geen vragen - wees de eerste om iets te vragen over SER-bestanden.