Skip to content

Commit

Permalink
Merge pull request volatilityfoundation#1037 from forensicxlab/featur…
Browse files Browse the repository at this point in the history
…e/bucket-s3

Feature: Remote analysis on cloud object-storage.
  • Loading branch information
ikelos authored Dec 1, 2023
2 parents 21af01d + 1f5a18d commit 42a89cf
Show file tree
Hide file tree
Showing 2 changed files with 61 additions and 0 deletions.
4 changes: 4 additions & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -16,3 +16,7 @@ pycryptodome

# This is required for memory acquisition via leechcore/pcileech.
leechcorepyc>=2.4.0

# This is required for memory analysis on a Amazon/MinIO S3 and Google Cloud object storage
gcsfs>=2023.1.0
s3fs>=2023.1.0
57 changes: 57 additions & 0 deletions volatility3/framework/layers/cloudstorage.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
# This file is Copyright 2022 Volatility Foundation and licensed under the Volatility Software License 1.0
# which is available at https://www.volatilityfoundation.org/license/vsl-v1.0
#

import logging
import urllib.parse
from typing import Optional, Any, List

try:
import s3fs

HAS_S3FS = True
except ImportError:
HAS_S3FS = False

try:
import gcsfs

HAS_GCSFS = True
except ImportError:
HAS_GCSFS = False

from volatility3.framework import exceptions
from volatility3.framework.layers import resources

vollog = logging.getLogger(__file__)

if HAS_S3FS:

class S3FileSystemHandler(resources.VolatilityHandler):
@classmethod
def non_cached_schemes(cls) -> List[str]:
return ["s3"]

@staticmethod
def default_open(req: urllib.request.Request) -> Optional[Any]:
"""Handles the request if it's the s3 scheme."""
if req.type == "s3":
object_uri = "://".join(req.full_url.split("://")[1:])
return s3fs.S3FileSystem().open(object_uri)
return None


if HAS_GCSFS:

class GSFileSystemHandler(resources.VolatilityHandler):
@classmethod
def non_cached_schemes(cls) -> List[str]:
return ["gs"]

@staticmethod
def default_open(req: urllib.request.Request) -> Optional[Any]:
"""Handles the request if it's the gs scheme."""
if req.type == "gs":
object_uri = "://".join(req.full_url.split("://")[1:])
return gcsfs.GCSFileSystem().open(object_uri)
return None

0 comments on commit 42a89cf

Please sign in to comment.