diff --git a/Core/src/org/sleuthkit/autopsy/centralrepository/datamodel/CorrelationAttributeUtil.java b/Core/src/org/sleuthkit/autopsy/centralrepository/datamodel/CorrelationAttributeUtil.java index 18fd4d5c1d30eceb41f29813b6e1bbfeea661f16..57cf17be036e000a50586b62376c25c2acbe7c18 100755 --- a/Core/src/org/sleuthkit/autopsy/centralrepository/datamodel/CorrelationAttributeUtil.java +++ b/Core/src/org/sleuthkit/autopsy/centralrepository/datamodel/CorrelationAttributeUtil.java @@ -651,7 +651,7 @@ private static CorrelationAttributeInstance makeCorrAttr(BlackboardArtifact arti logger.log(Level.SEVERE, String.format("Error querying central repository (%s)", artifact), ex); // NON-NLS return null; } catch (CorrelationAttributeNormalizationException ex) { - logger.log(Level.SEVERE, String.format("Error creating correlation attribute instance (%s)", artifact), ex); // NON-NLS + logger.log(Level.WARNING, String.format("Error creating correlation attribute instance (%s)", artifact)); // NON-NLS return null; } catch (NoCurrentCaseException ex) { logger.log(Level.WARNING, "Error getting current case", ex); // NON-NLS diff --git a/Core/src/org/sleuthkit/autopsy/coreutils/NetworkUtils.java b/Core/src/org/sleuthkit/autopsy/coreutils/NetworkUtils.java index 8078a8c6a32abe50083256a3e62f7e41a7730659..990757d1dbd4020c8bb1deca4180710e6c4e4622 100644 --- a/Core/src/org/sleuthkit/autopsy/coreutils/NetworkUtils.java +++ b/Core/src/org/sleuthkit/autopsy/coreutils/NetworkUtils.java @@ -24,6 +24,8 @@ import java.net.UnknownHostException; import java.util.logging.Level; import org.apache.commons.lang.StringUtils; +import org.apache.commons.validator.routines.DomainValidator; +import org.sleuthkit.autopsy.centralrepository.datamodel.CorrelationAttributeNormalizationException; public class NetworkUtils { @@ -113,14 +115,24 @@ public static String extractDomain(String urlString) { } catch (MalformedURLException ex) { //do not log if not a valid URL - we will try to extract it ourselves } - - // if there is a valid url host, get base domain from that host - // otherwise use urlString and parse the domain + String result = (StringUtils.isNotBlank(urlHost)) ? getBaseDomain(urlHost) : getBaseDomain(urlString); - return result; + // if there is a valid url host, get base domain from that host + // otherwise use urlString and parse the domain + DomainValidator validator = DomainValidator.getInstance(true); + if (validator.isValid(result)) { + return result; + } else { + final String validIpAddressRegex = "^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$"; + if (result.matches(validIpAddressRegex)) { + return result; + } else { + return ""; + } + } } } diff --git a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/Chromium.java b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/Chromium.java index 357f10b8a7908ba72624798c70fc0fa74544d204..c18d40fb00b574b39768871424c483195dfa6e5a 100644 --- a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/Chromium.java +++ b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/Chromium.java @@ -43,6 +43,7 @@ import java.util.ArrayList; import java.util.Arrays; import org.apache.commons.io.FilenameUtils; +import org.apache.commons.lang3.StringUtils; import org.openide.util.NbBundle.Messages; import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.casemodule.NoCurrentCaseException; @@ -253,26 +254,19 @@ private void getHistory(String browser, String browserLocation, long ingestJobId tempList = this.querySQLiteDb(temps, HISTORY_QUERY); logger.log(Level.INFO, "{0}- Now getting history from {1} with {2} artifacts identified.", new Object[]{getDisplayName(), temps, tempList.size()}); //NON-NLS for (HashMap<String, Object> result : tempList) { - Collection<BlackboardAttribute> bbattributes = new ArrayList<>(); - bbattributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_URL, - RecentActivityExtracterModuleFactory.getModuleName(), - ((result.get("url").toString() != null) ? result.get("url").toString() : ""))); //NON-NLS - bbattributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_DATETIME_ACCESSED, - RecentActivityExtracterModuleFactory.getModuleName(), - (Long.valueOf(result.get("last_visit_time").toString()) / 1000000) - Long.valueOf("11644473600"))); //NON-NLS - bbattributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_REFERRER, - RecentActivityExtracterModuleFactory.getModuleName(), - ((result.get("from_visit").toString() != null) ? result.get("from_visit").toString() : ""))); //NON-NLS - bbattributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_TITLE, - RecentActivityExtracterModuleFactory.getModuleName(), - ((result.get("title").toString() != null) ? result.get("title").toString() : ""))); //NON-NLS - bbattributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_PROG_NAME, - RecentActivityExtracterModuleFactory.getModuleName(), browser)); - bbattributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_DOMAIN, - RecentActivityExtracterModuleFactory.getModuleName(), - (NetworkUtils.extractDomain((result.get("url").toString() != null) ? result.get("url").toString() : "")))); //NON-NLS - + String url = result.get("url") == null ? "" : result.get("url").toString(); + String extractedDomain = NetworkUtils.extractDomain(url); + try { + Collection<BlackboardAttribute> bbattributes = createHistoryAttributes( + StringUtils.defaultString(url), + (Long.valueOf(result.get("last_visit_time").toString()) / 1000000) - Long.valueOf("11644473600"), + result.get("from_visit") == null ? "" : result.get("from_visit").toString(), + result.get("title") == null ? "" : result.get("title").toString(), + browser, + extractedDomain, + ""); + bbartifacts.add(createArtifactWithAttributes(BlackboardArtifact.Type.TSK_WEB_HISTORY, historyFile, bbattributes)); } catch (TskCoreException ex) { logger.log(Level.SEVERE, String.format("Failed to create history artifact for file (%d)", historyFile.getId()), ex); diff --git a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/Extract.java b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/Extract.java index 8eb649b93dbb2f1affbe6d7108add8945512d300..db509739438157fe74e6c6ed422d11cd3c92ca61 100644 --- a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/Extract.java +++ b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/Extract.java @@ -35,8 +35,10 @@ import java.util.HashMap; import java.util.List; import java.util.logging.Level; +import org.apache.commons.lang.StringUtils; import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.coreutils.Logger; +import org.sleuthkit.autopsy.coreutils.NetworkUtils; import org.sleuthkit.autopsy.coreutils.SQLiteDBConnect; import org.sleuthkit.autopsy.datamodel.ContentUtils; import org.sleuthkit.autopsy.ingest.DataSourceIngestModuleProgress; @@ -317,33 +319,44 @@ protected Collection<BlackboardAttribute> createHistoryAttributes(String url, Lo Collection<BlackboardAttribute> bbattributes = new ArrayList<>(); bbattributes.add(new BlackboardAttribute(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_URL, - RecentActivityExtracterModuleFactory.getModuleName(), - (url != null) ? url : "")); //NON-NLS + RecentActivityExtracterModuleFactory.getModuleName(), url)); //NON-NLS if (accessTime != null) { bbattributes.add(new BlackboardAttribute(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_DATETIME_ACCESSED, - RecentActivityExtracterModuleFactory.getModuleName(), accessTime)); + RecentActivityExtracterModuleFactory.getModuleName(), + accessTime)); } - bbattributes.add(new BlackboardAttribute(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_REFERRER, - RecentActivityExtracterModuleFactory.getModuleName(), - (referrer != null) ? referrer : "")); //NON-NLS + if (StringUtils.isNotBlank(referrer)) { + bbattributes.add(new BlackboardAttribute(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_REFERRER, + RecentActivityExtracterModuleFactory.getModuleName(), + referrer)); //NON-NLS + } - bbattributes.add(new BlackboardAttribute(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_TITLE, - RecentActivityExtracterModuleFactory.getModuleName(), - (title != null) ? title : "")); //NON-NLS + if (StringUtils.isNotBlank(title)) { + bbattributes.add(new BlackboardAttribute(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_TITLE, + RecentActivityExtracterModuleFactory.getModuleName(), + title)); //NON-NLS + } - bbattributes.add(new BlackboardAttribute(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_PROG_NAME, - RecentActivityExtracterModuleFactory.getModuleName(), - (programName != null) ? programName : "")); //NON-NLS + if (StringUtils.isNotBlank(programName)) { + bbattributes.add(new BlackboardAttribute(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_PROG_NAME, + RecentActivityExtracterModuleFactory.getModuleName(), + programName)); //NON-NLS + } - bbattributes.add(new BlackboardAttribute(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_DOMAIN, - RecentActivityExtracterModuleFactory.getModuleName(), - (domain != null) ? domain : "")); //NON-NLS + + if (StringUtils.isNotBlank(url)) { + bbattributes.add(new BlackboardAttribute(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_DOMAIN, + RecentActivityExtracterModuleFactory.getModuleName(), + domain)); //NON-NLS + } - bbattributes.add(new BlackboardAttribute(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_USER_NAME, - RecentActivityExtracterModuleFactory.getModuleName(), - (user != null) ? user : "")); //NON-NLS + if (StringUtils.isNotBlank(user)) { + bbattributes.add(new BlackboardAttribute(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_USER_NAME, + RecentActivityExtracterModuleFactory.getModuleName(), + user)); //NON-NLS + } return bbattributes; } diff --git a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ExtractIE.java b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ExtractIE.java index 41e5e0ceb36aa25dadd07b0dfbd6035eb868ce2a..370504ee95d5a13a89b6daeee082835c655f6c2f 100644 --- a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ExtractIE.java +++ b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ExtractIE.java @@ -154,22 +154,16 @@ private void getBookmark() { datetime = Long.valueOf(Tempdate); String domain = extractDomain(url); - Collection<BlackboardAttribute> bbattributes = new ArrayList<>(); - bbattributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_URL, - RecentActivityExtracterModuleFactory.getModuleName(), url)); - bbattributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_TITLE, - RecentActivityExtracterModuleFactory.getModuleName(), name)); - bbattributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_DATETIME_CREATED, - RecentActivityExtracterModuleFactory.getModuleName(), datetime)); - bbattributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_PROG_NAME, - RecentActivityExtracterModuleFactory.getModuleName(), - NbBundle.getMessage(this.getClass(), "ExtractIE.moduleName.text"))); - if (domain != null && domain.isEmpty() == false) { - bbattributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_DOMAIN, - RecentActivityExtracterModuleFactory.getModuleName(), domain)); - } - try { + Collection<BlackboardAttribute> bbattributes = createHistoryAttributes( + url, + datetime, + null, + name, + NbBundle.getMessage(this.getClass(), "ExtractIE.moduleName.text"), + domain, + null); + bbartifacts.add(createArtifactWithAttributes(BlackboardArtifact.Type.TSK_WEB_BOOKMARK, fav, bbattributes)); } catch (TskCoreException ex) { logger.log(Level.SEVERE, String.format("Failed to create %s for file %d", ARTIFACT_TYPE.TSK_WEB_BOOKMARK.getDisplayName(), fav.getId()), ex); @@ -567,28 +561,16 @@ private Collection<BlackboardArtifact> parsePascoOutput(AbstractFile origFile, S } } - Collection<BlackboardAttribute> bbattributes = new ArrayList<>(); - bbattributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_URL, - RecentActivityExtracterModuleFactory.getModuleName(), realurl)); - //bbattributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_URL_DECODED.getTypeID(), "RecentActivity", EscapeUtil.decodeURL(realurl))); - - bbattributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_DATETIME_ACCESSED, - RecentActivityExtracterModuleFactory.getModuleName(), ftime)); - bbattributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_REFERRER, - RecentActivityExtracterModuleFactory.getModuleName(), "")); - // @@@ NOte that other browser modules are adding TITLE in here for the title - bbattributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_PROG_NAME, - RecentActivityExtracterModuleFactory.getModuleName(), - NbBundle.getMessage(this.getClass(), - "ExtractIE.moduleName.text"))); - if (domain != null && domain.isEmpty() == false) { - bbattributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_DOMAIN, - RecentActivityExtracterModuleFactory.getModuleName(), domain)); - } - bbattributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_USER_NAME, - RecentActivityExtracterModuleFactory.getModuleName(), user)); - try { + Collection<BlackboardAttribute> bbattributes = createHistoryAttributes( + realurl, + ftime, + null, + null, + NbBundle.getMessage(this.getClass(), "ExtractIE.moduleName.text"), + domain, + user); + bbartifacts.add(createArtifactWithAttributes(BlackboardArtifact.Type.TSK_WEB_HISTORY, origFile, bbattributes)); } catch (TskCoreException ex) { logger.log(Level.SEVERE, String.format("Failed to create %s for file %d", BlackboardArtifact.Type.TSK_WEB_HISTORY.getDisplayName(), origFile.getId()), ex); diff --git a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/Firefox.java b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/Firefox.java index 163feec22dfe5c5de82fbc483e8c04c3f5b9f9a2..27bc0177acbafed2c922d09c0e4e2d5eedeff442 100644 --- a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/Firefox.java +++ b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/Firefox.java @@ -217,32 +217,19 @@ private void getHistory(long ingestJobId) { } String url = result.get("url").toString(); - - Collection<BlackboardAttribute> bbattributes = new ArrayList<>(); - bbattributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_URL, - RecentActivityExtracterModuleFactory.getModuleName(), - ((url != null) ? url : ""))); //NON-NLS - //bbattributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_URL_DECODED.getTypeID(), "RecentActivity", ((result.get("url").toString() != null) ? EscapeUtil.decodeURL(result.get("url").toString()) : ""))); - bbattributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_DATETIME_ACCESSED, - RecentActivityExtracterModuleFactory.getModuleName(), - (Long.valueOf(result.get("visit_date").toString())))); //NON-NLS - bbattributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_REFERRER, - RecentActivityExtracterModuleFactory.getModuleName(), - ((result.get("ref").toString() != null) ? result.get("ref").toString() : ""))); //NON-NLS - bbattributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_TITLE, - RecentActivityExtracterModuleFactory.getModuleName(), - ((result.get("title").toString() != null) ? result.get("title").toString() : ""))); //NON-NLS - bbattributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_PROG_NAME, - RecentActivityExtracterModuleFactory.getModuleName(), - NbBundle.getMessage(this.getClass(), "Firefox.moduleName"))); String domain = extractDomain(url); - if (domain != null && domain.isEmpty() == false) { - bbattributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_DOMAIN, - RecentActivityExtracterModuleFactory.getModuleName(), domain)); //NON-NLS - - } - try { + + Collection<BlackboardAttribute> bbattributes = createHistoryAttributes( + url, + Long.valueOf(result.get("visit_date").toString()), + result.get("ref").toString(), + result.get("title").toString(), + NbBundle.getMessage(this.getClass(), "Firefox.moduleName"), + domain, + null); + + bbartifacts.add(createArtifactWithAttributes(BlackboardArtifact.Type.TSK_WEB_HISTORY, historyFile, bbattributes)); } catch (TskCoreException ex) { logger.log(Level.SEVERE, String.format("Failed to create TSK_WEB_HISTORY artifact for file %d", historyFile.getId()), ex);