Lewati ke konten utama

Lindungi dan analisis file

Dalam Protect Mode, policy manajemen konten memungkinkan kontrol atas berbagai jenis konten file seperti kode yang dapat dieksekusi, konten formulir interaktif, dan sejumlah tindakan (mis., tautan eksternal atau eksekusi JavaScript). Elemen file ini diketahui sebagai vektor serangan umum ketika ditemukan di dalam file. policy manajemen konten akan menentukan bagaimana Glasswall Embedded Engine harus memproses struktur ini. Dalam Analysis Mode, hal-hal ini dilaporkan sebagai SanitisationItems. policy manajemen konten berbeda-beda di berbagai jenis file yang didukung.

Koreksi otomatis kembali ke spesifikasi file juga dilakukan saat file dibuat ulang. Tujuannya adalah agar Glasswall Embedded Engine dapat menghapus ancaman yang tersembunyi di dalam struktur file, sekaligus mencegah kemungkinan aktivasi eksploit melalui penyalahgunaan komponen struktural dalam file. Dalam Analysis Mode, hal-hal ini dilaporkan sebagai RemedyItems.

File dapat dilindungi secara individual dari path file atau di memori menggunakan metode protect_file atau protect_directory.

Contoh

Lindungi

Lindungi dari jalur file ke jalur file

import glasswall


# Load the Glasswall Editor library
editor = glasswall.Editor(r"C:\gwpw\libraries\10.0")

# Use the default policy to sanitise a file, writing the sanitised file to a new path
editor.protect_file(
input_file=r"C:\gwpw\input\TestFile_11.doc",
output_file=r"C:\gwpw\output\editor\protect_f2f\TestFile_11.doc",
)

Lindungi dari jalur file ke memori

protect_file mengembalikan byte file yang telah dilindungi. Contoh di bawah menunjukkan penetapan variabel file_bytes. Kita dapat melihat bahwa setelah sanitasi, 8 byte pertama dari file_bytes cocok dengan signature file untuk format Microsoft Compound File Binary (CFB), D0 CF 11 E0 A1 B1 1A E1.

import glasswall


# Load the Glasswall Editor library
editor = glasswall.Editor(r"C:\gwpw\libraries\10.0")

# Use the default policy to sanitise a file in memory, returning the file bytes in memory
file_bytes = editor.protect_file(
input_file=r"C:\gwpw\input\TestFile_11.doc"
)

assert file_bytes[:8] == b'\xd0\xcf\x11\xe0\xa1\xb1\x1a\xe1'

Lindungi dari memori

import glasswall


# Load the Glasswall Editor library
editor = glasswall.Editor(r"C:\gwpw\libraries\10.0")

# Read file from disk to memory
with open(r"C:\gwpw\input\TestFile_11.doc", "rb") as f:
input_bytes = f.read()

# Use the default policy to sanitise a file
file_bytes = editor.protect_file(
input_file=input_bytes,
)

assert file_bytes[:8] == b'\xd0\xcf\x11\xe0\xa1\xb1\x1a\xe1'

Lindungi file dalam direktori

import glasswall


# Load the Glasswall Editor library
editor = glasswall.Editor(r"C:\gwpw\libraries\10.0")

# Use the default policy to protect a directory of files, writing the sanitised files to a new directory.
editor.protect_directory(
input_directory=r"C:\gwpw\input",
output_directory=r"C:\gwpw\output\editor\protect_directory"
)

Lindungi file dalam direktori yang mungkin berisi tipe file yang tidak didukung

Perilaku default dari wrapper Python Glasswall adalah memunculkan exception yang relevan (lihat: glasswall.libraries.editor.errors) jika pemrosesan gagal. Meneruskan raise_unsupported=False akan mencegah exception dimunculkan dan dapat berguna saat bekerja dengan direktori yang berisi campuran tipe file yang didukung dan tidak didukung ketika diinginkan untuk memproses sebanyak mungkin file alih-alih menghentikan proses pada kegagalan pertama.

import glasswall


# Load the Glasswall Editor library
editor = glasswall.Editor(r"C:\gwpw\libraries\10.0")

# Use the default policy to protect a directory of files, writing the sanitised files to a new directory.
editor.protect_directory(
input_directory=r"C:\gwpw\input_with_unsupported_file_types",
output_directory=r"C:\gwpw\output\editor\protect_directory_unsupported",
raise_unsupported=False
)

Lindungi file dalam direktori menggunakan policy manajemen konten kustom

Menggunakan glasswall.content_management.policies.Editor:

import glasswall


# Load the Glasswall Editor library
editor = glasswall.Editor(r"C:\gwpw\libraries\10.0")

# Use a custom Editor policy to sanitise all files in the input directory
# and write them to the input_sanitised directory. If macros are present
# in ppt or word files, the file will be marked as non-conforming and blocked.
# If internal or external hyperlinks are present in word files they will not
# be sanitised, and will remain in the regenerated document.
editor.protect_directory(
input_directory=r"C:\gwpw\input",
output_directory=r"C:\gwpw\output\editor\protect_directory_custom",
content_management_policy=glasswall.content_management.policies.Editor(
default="sanitise",
config={
"pptConfig": {
"macros": "disallow",
},
"wordConfig": {
"internal_hyperlinks": "allow",
"external_hyperlinks": "allow",
"macros": "disallow",
}
}
)
)

Lindungi file dalam direktori secara kondisional berdasarkan format file

Contoh di bawah ini menunjukkan pemrosesan hanya file .doc dan .docx dari direktori bertingkat yang berisi beberapa format file.

import os

import glasswall


# Load the Glasswall Editor library
editor = glasswall.Editor(r"C:\gwpw\libraries\10.0")

input_directory = r"C:\gwpw\input"
output_directory = r"C:\gwpw\output\editor\protect_directory_file_format"

# Iterate relative file paths from input_directory
for relative_file in glasswall.utils.list_file_paths(input_directory, absolute=False):
# Construct absolute paths
input_file = os.path.join(input_directory, relative_file)
output_file = os.path.join(output_directory, relative_file)

# Get the file type of the file
file_type = editor.determine_file_type(
input_file=input_file,
as_string=True,
raise_unsupported=False
)

# Protect only doc and docx files
if file_type in ["doc", "docx"]:
editor.protect_file(input_file, output_file)


Analisis

Laporan Embedded Engine memberikan deskripsi data yang terperinci dan tidak bergantung pada tipe file, serta dicatat dalam format XML. Struktur laporan ini mengikuti Analysis Report XSD, yang dirancang untuk menyederhanakan parsing dan pemrosesan, sehingga memastikan integrasi dan analisis data yang lebih mudah. Lihat Pelaporan Engine.

File dapat dianalisis secara individual dari path file atau di memori menggunakan metode analyse_file, atau semua file dari sebuah direktori dapat dianalisis menggunakan metode analyse_directory.

Analisis dari path file ke path file

import glasswall


# Load the Glasswall Editor library
editor = glasswall.Editor(r"C:\gwpw\libraries\10.0")

# Use the default policy to analyse a file, writing the analysis report to a new path
editor.analyse_file(
input_file=r"C:\gwpw\input\TestFile_11.doc",
output_file=r"C:\gwpw\output\editor\analyse_f2f\TestFile_11.doc.xml",
)

Analisis dari path file ke memori

analyse_file mengembalikan bytes file xml laporan analisis. Contoh di bawah ini menunjukkan penetapan variabel analysis_report dan pemeriksaan isi bagian awal laporan analisis Editor.

import glasswall


# Load the Glasswall Editor library
editor = glasswall.Editor(r"C:\gwpw\libraries\10.0")

# Use the default policy to analyse a file
analysis_report = editor.analyse_file(
input_file=r"C:\gwpw\input\TestFile_11.doc",
)

assert analysis_report[:500] == b'<?xml version="1.0" encoding="utf-8"?>\n<gw:GWallInfo xsi:schemaLocation="http://glasswall.com/namespace/gwallInfo.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:gw="http://glasswall.com/namespace">\n\t<gw:DocumentStatistics>\n\t\t<gw:DocumentSummary>\n\t\t\t<gw:TotalSizeInBytes>35840</gw:TotalSizeInBytes>\n\t\t\t<gw:FileType>doc</gw:FileType>\n\t\t\t<gw:Version>Not Applicable</gw:Version>\n\t\t\t<gw:InputSHA256>9FDE85B8800C1019D2865FA298A7F75873E09870B71F9825827E354B865686A6</gw:InputSHA256>\n\t\t\t<gw'

Analisis dari memori

import glasswall


# Load the Glasswall Editor library
editor = glasswall.Editor(r"C:\gwpw\libraries\10.0")

# Read file from disk to memory
with open(r"C:\gwpw\input\TestFile_11.doc", "rb") as f:
input_bytes = f.read()

# Use the default policy to analyse a file
analysis_report = editor.analyse_file(
input_file=input_bytes,
)

assert analysis_report[:500] == b'<?xml version="1.0" encoding="utf-8"?>\n<gw:GWallInfo xsi:schemaLocation="http://glasswall.com/namespace/gwallInfo.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:gw="http://glasswall.com/namespace">\n\t<gw:DocumentStatistics>\n\t\t<gw:DocumentSummary>\n\t\t\t<gw:TotalSizeInBytes>35840</gw:TotalSizeInBytes>\n\t\t\t<gw:FileType>doc</gw:FileType>\n\t\t\t<gw:Version>Not Applicable</gw:Version>\n\t\t\t<gw:InputSHA256>9FDE85B8800C1019D2865FA298A7F75873E09870B71F9825827E354B865686A6</gw:InputSHA256>\n\t\t\t<gw'

Analisis file dalam direktori

import glasswall


# Load the Glasswall Editor library
editor = glasswall.Editor(r"C:\gwpw\libraries\10.0")

# Use the default policy to analyse a directory of files, writing the analysis reports to a new directory.
editor.analyse_directory(
input_directory=r"C:\gwpw\input",
output_directory=r"C:\gwpw\output\editor\analyse_directory"
)

Analisis file dalam direktori yang mungkin berisi jenis file yang tidak didukung

Perilaku default dari wrapper Python Glasswall adalah memunculkan exception yang relevan (lihat: glasswall.libraries.editor.errors) jika pemrosesan gagal. Meneruskan raise_unsupported=False akan mencegah exception dimunculkan dan dapat berguna saat bekerja dengan direktori yang berisi campuran tipe file yang didukung dan tidak didukung ketika diinginkan untuk memproses sebanyak mungkin file alih-alih menghentikan proses pada kegagalan pertama.

import glasswall


# Load the Glasswall Editor library
editor = glasswall.Editor(r"C:\gwpw\libraries\10.0")

# Use the default policy to analyse a directory of files, writing the analysis reports to a new directory.
editor.analyse_directory(
input_directory=r"C:\gwpw\input_with_unsupported_file_types",
output_directory=r"C:\gwpw\output\editor\analyse_directory_unsupported",
raise_unsupported=False
)

Menganalisis file dalam direktori menggunakan policy manajemen konten kustom

Menggunakan glasswall.content_management.policies.Editor:

import glasswall


# Load the Glasswall Editor library
editor = glasswall.Editor(r"C:\gwpw\libraries\10.0")

# Use a custom Editor policy to analyse all files in the input directory
# and write them to analyse_directory_custom directory. If macros are
# present in ppt or word files, a GeneralFail exception will be raised if the
# raise_unsupported argument is left at its default value of False, but the
# analysis report will still be written to file and will contain IssueItems.
# If internal or external hyperlinks are present in word files they will not
# be sanitised, and will remain in the regenerated document.
editor.analyse_directory(
input_directory=r"C:\gwpw\input",
output_directory=r"C:\gwpw\output\editor\analyse_directory_custom",
content_management_policy=glasswall.content_management.policies.Editor(
default="sanitise",
config={
"pptConfig": {
"macros": "disallow",
},
"wordConfig": {
"internal_hyperlinks": "allow",
"external_hyperlinks": "allow",
"macros": "disallow",
}
}
),
raise_unsupported=False
)

Menganalisis file dalam direktori secara kondisional berdasarkan format file

Contoh di bawah ini menunjukkan pemrosesan hanya file .doc dan .docx dari direktori bertingkat yang berisi beberapa format file.

import os

import glasswall


# Load the Glasswall Editor library
editor = glasswall.Editor(r"C:\gwpw\libraries\10.0")

input_directory = r"C:\gwpw\input"
output_directory = r"C:\gwpw\output\editor\analyse_directory_file_format"

# Iterate relative file paths from input_directory
for relative_file in glasswall.utils.list_file_paths(input_directory, absolute=False):
# Construct absolute paths
input_file = os.path.join(input_directory, relative_file)
output_file = os.path.join(output_directory, relative_file + ".xml")

# Get the file type of the file
file_type = editor.determine_file_type(
input_file=input_file,
as_string=True,
raise_unsupported=False
)

# Analyse only doc and docx files
if file_type in ["doc", "docx"]:
editor.analyse_file(input_file, output_file)


Protect dan Analyse

Fungsi tingkat tinggi ini memungkinkan Anda menjalankan metode Protect with Analysis dalam satu sesi. Untuk informasi lebih lanjut, lihat tautan dokumentasi di bawah ini.