Source code for plaso.parsers.sqlite_plugins.ios_accounts

"""SQLite parser plugin for iOS accounts (Accounts3.db) database files."""

from dfdatetime import cocoa_time as dfdatetime_cocoa_time

from plaso.containers import events
from plaso.parsers import sqlite
from plaso.parsers.sqlite_plugins import interface


[docs] class IOSAccountsEventData(events.EventData): """iOS accounts event data. Attributes: account_type (str): account type. creation_time (dfdatetime.DateTimeValues): date and time the account was created. identifier (str): identifier. owning_bundle_identifier (str): owning bundle identifier of the application managing the account. username (str): user name. """ DATA_TYPE = "ios:accounts:entry"
[docs] def __init__(self): """Initializes event data.""" super().__init__(data_type=self.DATA_TYPE) self.account_type = None self.creation_time = None self.identifier = None self.owning_bundle_identifier = None self.username = None
[docs] class IOSAccountsPlugin(interface.SQLitePlugin): """SQLite parser plugin for iOS accounts (Accounts3.db) database files.""" NAME = "ios_accounts" DATA_FORMAT = "iOS accounts SQLite database (Accounts3.db) file" REQUIRED_STRUCTURE = { "ZACCOUNT": frozenset( ["ZACCOUNTTYPE", "ZDATE", "ZUSERNAME", "ZIDENTIFIER", "ZOWNINGBUNDLEID"] ), "ZACCOUNTTYPE": frozenset(["Z_PK", "ZACCOUNTTYPEDESCRIPTION"]), } QUERIES = [ ( ( "SELECT ZACCOUNT.ZDATE, ZACCOUNTTYPE.ZACCOUNTTYPEDESCRIPTION, " "ZACCOUNT.ZUSERNAME, ZACCOUNT.ZIDENTIFIER, ZACCOUNT.ZOWNINGBUNDLEID " "FROM ZACCOUNT LEFT JOIN ZACCOUNTTYPE " "ON ZACCOUNT.ZACCOUNTTYPE = ZACCOUNTTYPE.Z_PK" ), "ParseAccountRow", ) ] SCHEMAS = [ { "ZACCESSOPTIONSKEY": ( "CREATE TABLE ZACCESSOPTIONSKEY ( Z_PK INTEGER PRIMARY KEY, Z_ENT " "INTEGER, Z_OPT INTEGER, ZNAME VARCHAR )" ), "ZACCOUNT": ( "CREATE TABLE ZACCOUNT ( Z_PK INTEGER PRIMARY KEY, Z_ENT INTEGER, " "Z_OPT INTEGER, ZACTIVE INTEGER, ZAUTHENTICATED INTEGER, " "ZSUPPORTSAUTHENTICATION INTEGER, ZVISIBLE INTEGER, ZACCOUNTTYPE " "INTEGER, ZPARENTACCOUNT INTEGER, ZDATE TIMESTAMP, " "ZLASTCREDENTIALRENEWALREJECTIONDATE TIMESTAMP, ZACCOUNTDESCRIPTION " "VARCHAR, ZAUTHENTICATIONTYPE VARCHAR, ZCREDENTIALTYPE VARCHAR, " "ZIDENTIFIER VARCHAR, ZOWNINGBUNDLEID VARCHAR, ZUSERNAME VARCHAR, " "ZDATACLASSPROPERTIES BLOB )" ), "ZACCOUNTPROPERTY": ( "CREATE TABLE ZACCOUNTPROPERTY ( Z_PK INTEGER PRIMARY KEY, Z_ENT " "INTEGER, Z_OPT INTEGER, ZOWNER INTEGER, ZKEY VARCHAR, ZVALUE BLOB " ")" ), "ZACCOUNTTYPE": ( "CREATE TABLE ZACCOUNTTYPE ( Z_PK INTEGER PRIMARY KEY, Z_ENT " "INTEGER, Z_OPT INTEGER, ZENCRYPTACCOUNTPROPERTIES INTEGER, " "ZOBSOLETE INTEGER, ZSUPPORTSAUTHENTICATION INTEGER, " "ZSUPPORTSMULTIPLEACCOUNTS INTEGER, ZVISIBILITY INTEGER, " "ZACCOUNTTYPEDESCRIPTION VARCHAR, ZCREDENTIALPROTECTIONPOLICY " "VARCHAR, ZCREDENTIALTYPE VARCHAR, ZIDENTIFIER VARCHAR, " "ZOWNINGBUNDLEID VARCHAR )" ), "ZAUTHORIZATION": ( "CREATE TABLE ZAUTHORIZATION ( Z_PK INTEGER PRIMARY KEY, Z_ENT " "INTEGER, Z_OPT INTEGER, ZACCOUNTTYPE INTEGER, ZBUNDLEID VARCHAR, " "ZGRANTEDPERMISSIONS VARCHAR, ZOPTIONS BLOB )" ), "ZCREDENTIALITEM": ( "CREATE TABLE ZCREDENTIALITEM ( Z_PK INTEGER PRIMARY KEY, Z_ENT " "INTEGER, Z_OPT INTEGER, ZPERSISTENT INTEGER, ZEXPIRATIONDATE " "TIMESTAMP, ZACCOUNTIDENTIFIER VARCHAR, ZSERVICENAME VARCHAR )" ), "ZDATACLASS": ( "CREATE TABLE ZDATACLASS ( Z_PK INTEGER PRIMARY KEY, Z_ENT INTEGER, " "Z_OPT INTEGER, ZNAME BLOB )" ), "Z_1OWNINGACCOUNTTYPES": ( "CREATE TABLE Z_1OWNINGACCOUNTTYPES ( Z_1ACCESSKEYS INTEGER, " "Z_4OWNINGACCOUNTTYPES INTEGER, PRIMARY KEY (Z_1ACCESSKEYS, " "Z_4OWNINGACCOUNTTYPES) )" ), "Z_2ENABLEDDATACLASSES": ( "CREATE TABLE Z_2ENABLEDDATACLASSES ( Z_2ENABLEDACCOUNTS INTEGER, " "Z_7ENABLEDDATACLASSES INTEGER, PRIMARY KEY (Z_2ENABLEDACCOUNTS, " "Z_7ENABLEDDATACLASSES) )" ), "Z_2PROVISIONEDDATACLASSES": ( "CREATE TABLE Z_2PROVISIONEDDATACLASSES ( Z_2PROVISIONEDACCOUNTS " "INTEGER, Z_7PROVISIONEDDATACLASSES INTEGER, PRIMARY KEY " "(Z_2PROVISIONEDACCOUNTS, Z_7PROVISIONEDDATACLASSES) )" ), "Z_4SUPPORTEDDATACLASSES": ( "CREATE TABLE Z_4SUPPORTEDDATACLASSES ( Z_4SUPPORTEDTYPES INTEGER, " "Z_7SUPPORTEDDATACLASSES INTEGER, PRIMARY KEY (Z_4SUPPORTEDTYPES, " "Z_7SUPPORTEDDATACLASSES) )" ), "Z_4SYNCABLEDATACLASSES": ( "CREATE TABLE Z_4SYNCABLEDATACLASSES ( Z_4SYNCABLETYPES INTEGER, " "Z_7SYNCABLEDATACLASSES INTEGER, PRIMARY KEY (Z_4SYNCABLETYPES, " "Z_7SYNCABLEDATACLASSES) )" ), "Z_METADATA": ( "CREATE TABLE Z_METADATA (Z_VERSION INTEGER PRIMARY KEY, Z_UUID " "VARCHAR(255), Z_PLIST BLOB)" ), "Z_MODELCACHE": ("CREATE TABLE Z_MODELCACHE (Z_CONTENT BLOB)"), "Z_PRIMARYKEY": ( "CREATE TABLE Z_PRIMARYKEY (Z_ENT INTEGER PRIMARY KEY, Z_NAME " "VARCHAR, Z_SUPER INTEGER, Z_MAX INTEGER)" ), } ] REQUIRES_SCHEMA_MATCH = False def _GetTimeRowValue(self, query_hash, row, value_name): """Retrieves a date and time value from the row. Args: query_hash (int): hash of the query, that uniquely identifies the query that produced the row. row (sqlite3.Row): row. value_name (str): name of the value. Returns: dfdatetime.CocoaTime: date and time value or None if not available. """ timestamp = self._GetRowValue(query_hash, row, value_name) if timestamp is None: return None return dfdatetime_cocoa_time.CocoaTime(timestamp=timestamp) # pylint: disable=unused-argument
[docs] def ParseAccountRow(self, parser_mediator, query, row, **unused_kwargs): """Parses an account row. Args: parser_mediator (ParserMediator): mediates interactions between parsers and other components, such as storage and dfVFS. query (str): query that created the row. row (sqlite3.Row): row. """ query_hash = hash(query) event_data = IOSAccountsEventData() event_data.account_type = self._GetRowValue( query_hash, row, "ZACCOUNTTYPEDESCRIPTION" ) event_data.creation_time = self._GetTimeRowValue(query_hash, row, "ZDATE") event_data.identifier = self._GetRowValue(query_hash, row, "ZIDENTIFIER") event_data.owning_bundle_identifier = self._GetRowValue( query_hash, row, "ZOWNINGBUNDLEID" ) event_data.username = self._GetRowValue(query_hash, row, "ZUSERNAME") parser_mediator.ProduceEventData(event_data)
sqlite.SQLiteParser.RegisterPlugin(IOSAccountsPlugin)