SER ファイル形式とは?
.serファイルには、Javaシリアル化オブジェクトストリームが含まれています。これは、ObjectOutputStreamによって生成され、ObjectInputStreamによって読み戻される、1つ以上のJavaオブジェクトのバイナリエンコーディングです。この形式は1997年にJava 1.1で導入され、Javaオブジェクトシリアル化仕様で定義されています。
すべての有効な.serファイルは、4バイトのマジックシーケンスAC ED 00 05で始まります。バイト0-1はSTREAM_MAGIC (0xACED)、バイト2-3はSTREAM_VERSION (0x0005)を保持します。ストリームは、型付きブロックマーカー(TC_OBJECT (0x73)、TC_CLASS (0x76)、TC_ARRAY (0x75)、TC_STRING (0x74)、TC_NULL (0x70))を使用して、各オブジェクトのクラス記述子、フィールド、およびネストされたデータをエンコードします。
シリアル化は、アプリケーション状態のキャッシュ、JVM間でのオブジェクトの受け渡し、および構成データの永続化に広く使用されてきました。しかし、Javaのデシリアライズは既知のセキュリティ脆弱性です。悪意を持って作成されたストリームは、クラスパス内のガジェットチェーンを悪用してリモートコード実行を実現する可能性があります。Java 9では、デシリアライズ可能なクラスを制限するためにObjectInputFilterが導入されました。最新のJavaガイダンスでは、信頼できないデータに.serファイルを使用することを強く推奨していません。
推奨される最新の代替手段には、JSON(JacksonまたはGson経由)、Protocol Buffers、またはKryoが含まれます。GeneMapper (Thermo Fisher Scientific) は、バイオインフォマティクスのプロジェクトデータに.serファイルを使用します。SerializationDumperユーティリティを使用すると、実行せずに.serの内容を検査できます。
セキュリティと安全性
リスク: HIGHJavaのデシリアライズは、Javaアプリケーションにおいて最も深刻度の高い攻撃対象の1つです(歴史的にOWASP Top 10に含まれます)。脆弱なアプリケーションで信頼できない.serファイルを開くと、ガジェットチェーン(例:2015年のApache Commons Collectionsのエクスプロイト)を介して任意のコードが実行される可能性があります。エンドユーザーは、信頼できるソースからの.serファイルのみを、本来のアプリケーションで開くようにしてください。未知の.serファイルを分析する場合は、ライブJVMでデシリアライズするのではなく、SerializationDumper(ペイロードを実行しない静的ダンプ)を使用してください。
形式の詳細
概要- GeneMapperプロジェクトファイル - Applied Biosystems/Life TechnologiesのGeneMapperソフトウェアは、独自のプロジェクトデータコンテナとして.serを使用します。
- 汎用アプリケーションデータキャッシュ - あらゆるJavaアプリケーションが任意のオブジェクトを.serにシリアル化できます。内容は完全にアプリケーション固有です。
SER ファイルを開くプログラム
技術的詳細
詳細仕様| マジックバイト | オフセット0に AC ED 00 05 - STREAM_MAGIC (0xACED) に続いて STREAM_VERSION (0x0005) |
| エンコーディング | バイナリ、ビッグエンディアン |
| MIMEタイプ | application/x-java-serialized-object |
| シリアル化API | java.io.ObjectOutputStream (書き込み) / java.io.ObjectInputStream (読み取り); クラスは java.io.Serializable を実装する必要があります |
| プロトコルバージョン | シリアル化プロトコルバージョン2 (ストリームバージョン5)、Java 1.2以降安定 |
| クラスのバージョニング | 各クラスにserialVersionUIDが埋め込まれます。バージョンの不一致はデシリアライズ時にInvalidClassExceptionをスローします |
| コンテンツマーカー | TC_OBJECT (0x73), TC_CLASS (0x76), TC_ARRAY (0x75), TC_STRING (0x74), TC_NULL (0x70) |
| セキュリティリスク | 既知のデシリアライズ・ガジェットチェーン攻撃ベクトル。Java 9以降はObjectInputFilterのクラス許可リストにより緩和 |
| 一般的なサイズ | 単純なオブジェクトの数バイトから、巨大なシリアル化オブジェクトグラフの数百MBまで |
| プラットフォームの移植性 | Windows、Linux、またはmacOS上の任意のJVMで読み取り可能。Javaエコシステム以外では移植性なし |
| ストリーム圧縮 | 形式レベルでは非圧縮。アプリケーション層でGZIPOutputStreamラッピングが任意に適用される |
| 整合性 | 組み込みのチェックサムなし。整合性はアプリケーション層の署名または安全な転送によって提供される |
| 既知のアプリケーション | GeneMapper (Thermo Fisher Scientific) がバイオインフォマティクスのプロジェクトおよびデータファイルに.serを使用 |
| リリース日 | 1997 (Java 1.1, JDK 1.1) |
| 最新バージョン | Stream version 5 (serialization protocol version 2, since Java 1.2) |
| オープンスタンダード | はい · ロイヤリティフリー |
| 仕様書 | docs.oracle.com |
SER の変換
コミュニティ Q&A
ユーザーからの質問まだ質問はありません。SER ファイルについて最初の質問をしてみましょう。