Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(606)

Side by Side Diff: chrome/browser/safe_browsing/download_protection_service.cc

Issue 2934373002: Record Code Signature of Downloaded DMG files (Closed)
Patch Set: adjusted test file path names Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/safe_browsing/download_protection_service.h" 5 #include "chrome/browser/safe_browsing/download_protection_service.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <memory> 9 #include <memory>
10 10
(...skipping 332 matching lines...) Expand 10 before | Expand all | Expand 10 after
343 DownloadProtectionService* service, 343 DownloadProtectionService* service,
344 const scoped_refptr<SafeBrowsingDatabaseManager>& database_manager, 344 const scoped_refptr<SafeBrowsingDatabaseManager>& database_manager,
345 BinaryFeatureExtractor* binary_feature_extractor) 345 BinaryFeatureExtractor* binary_feature_extractor)
346 : item_(item), 346 : item_(item),
347 url_chain_(item->GetUrlChain()), 347 url_chain_(item->GetUrlChain()),
348 referrer_url_(item->GetReferrerUrl()), 348 referrer_url_(item->GetReferrerUrl()),
349 tab_url_(item->GetTabUrl()), 349 tab_url_(item->GetTabUrl()),
350 tab_referrer_url_(item->GetTabReferrerUrl()), 350 tab_referrer_url_(item->GetTabReferrerUrl()),
351 archived_executable_(false), 351 archived_executable_(false),
352 archive_is_valid_(ArchiveValid::UNSET), 352 archive_is_valid_(ArchiveValid::UNSET),
353 #if defined(OS_MACOSX)
354 disk_image_signature_length_(0),
355 disk_image_signature_(nullptr),
356 #endif
353 callback_(callback), 357 callback_(callback),
354 service_(service), 358 service_(service),
355 binary_feature_extractor_(binary_feature_extractor), 359 binary_feature_extractor_(binary_feature_extractor),
356 database_manager_(database_manager), 360 database_manager_(database_manager),
357 pingback_enabled_(service_->enabled()), 361 pingback_enabled_(service_->enabled()),
358 finished_(false), 362 finished_(false),
359 type_(ClientDownloadRequest::WIN_EXECUTABLE), 363 type_(ClientDownloadRequest::WIN_EXECUTABLE),
360 start_time_(base::TimeTicks::Now()), 364 start_time_(base::TimeTicks::Now()),
361 skipped_url_whitelist_(false), 365 skipped_url_whitelist_(false),
362 skipped_certificate_whitelist_(false), 366 skipped_certificate_whitelist_(false),
(...skipping 415 matching lines...) Expand 10 before | Expand all | Expand 10 after
778 dmg_analyzer_->Start(); 782 dmg_analyzer_->Start();
779 dmg_analysis_start_time_ = base::TimeTicks::Now(); 783 dmg_analysis_start_time_ = base::TimeTicks::Now();
780 } 784 }
781 785
782 void OnDmgAnalysisFinished(const ArchiveAnalyzerResults& results) { 786 void OnDmgAnalysisFinished(const ArchiveAnalyzerResults& results) {
783 DCHECK_CURRENTLY_ON(BrowserThread::UI); 787 DCHECK_CURRENTLY_ON(BrowserThread::UI);
784 DCHECK_EQ(ClientDownloadRequest::MAC_EXECUTABLE, type_); 788 DCHECK_EQ(ClientDownloadRequest::MAC_EXECUTABLE, type_);
785 if (!service_) 789 if (!service_)
786 return; 790 return;
787 791
792 #if defined(OS_MACOSX)
793 disk_image_signature_length_ = results.signature_blob.size();
794 if (disk_image_signature_length_ > 0) {
795 disk_image_signature_ =
796 std::unique_ptr<uint8_t[]>(new uint8_t[disk_image_signature_length_]);
797 memcpy(disk_image_signature_.get(), results.signature_blob.data(),
798 disk_image_signature_length_);
799 }
800 #endif
801
788 // Even if !results.success, some of the DMG may have been parsed. 802 // Even if !results.success, some of the DMG may have been parsed.
789 archive_is_valid_ = 803 archive_is_valid_ =
790 (results.success ? ArchiveValid::VALID : ArchiveValid::INVALID); 804 (results.success ? ArchiveValid::VALID : ArchiveValid::INVALID);
791 archived_executable_ = results.has_executable; 805 archived_executable_ = results.has_executable;
792 archived_binary_.CopyFrom(results.archived_binary); 806 archived_binary_.CopyFrom(results.archived_binary);
793 DVLOG(1) << "DMG analysis has finished for " << item_->GetFullPath().value() 807 DVLOG(1) << "DMG analysis has finished for " << item_->GetFullPath().value()
794 << ", has_executable=" << results.has_executable 808 << ", has_executable=" << results.has_executable
795 << ", success=" << results.success; 809 << ", success=" << results.success;
796 810
797 int64_t uma_file_type = FileTypePolicies::GetInstance()->UmaValueForFile( 811 int64_t uma_file_type = FileTypePolicies::GetInstance()->UmaValueForFile(
(...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after
1029 1043
1030 ReferrerChainData* referrer_chain_data = 1044 ReferrerChainData* referrer_chain_data =
1031 static_cast<ReferrerChainData*>( 1045 static_cast<ReferrerChainData*>(
1032 item_->GetUserData(kDownloadReferrerChainDataKey)); 1046 item_->GetUserData(kDownloadReferrerChainDataKey));
1033 if (referrer_chain_data && 1047 if (referrer_chain_data &&
1034 !referrer_chain_data->GetReferrerChain()->empty()) { 1048 !referrer_chain_data->GetReferrerChain()->empty()) {
1035 request.mutable_referrer_chain()->Swap( 1049 request.mutable_referrer_chain()->Swap(
1036 referrer_chain_data->GetReferrerChain()); 1050 referrer_chain_data->GetReferrerChain());
1037 } 1051 }
1038 1052
1053 // TODO(mortonm): add UMA stats to keep track of % of DMG use new format
1054 #if defined(OS_MACOSX)
1055 if (disk_image_signature_length_ > 0) {
1056 request.set_udif_code_signature(disk_image_signature_.get(),
1057 disk_image_signature_length_);
1058 }
1059 #endif
1060
1039 if (archive_is_valid_ != ArchiveValid::UNSET) 1061 if (archive_is_valid_ != ArchiveValid::UNSET)
1040 request.set_archive_valid(archive_is_valid_ == ArchiveValid::VALID); 1062 request.set_archive_valid(archive_is_valid_ == ArchiveValid::VALID);
1041 request.mutable_signature()->CopyFrom(signature_info_); 1063 request.mutable_signature()->CopyFrom(signature_info_);
1042 if (image_headers_) 1064 if (image_headers_)
1043 request.set_allocated_image_headers(image_headers_.release()); 1065 request.set_allocated_image_headers(image_headers_.release());
1044 if (archived_executable_) 1066 if (archived_executable_)
1045 request.mutable_archived_binary()->Swap(&archived_binary_); 1067 request.mutable_archived_binary()->Swap(&archived_binary_);
1046 if (!request.SerializeToString(&client_download_request_data_)) { 1068 if (!request.SerializeToString(&client_download_request_data_)) {
1047 FinishRequest(UNKNOWN, REASON_INVALID_REQUEST_PROTO); 1069 FinishRequest(UNKNOWN, REASON_INVALID_REQUEST_PROTO);
1048 return; 1070 return;
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after
1224 GURL referrer_url_; 1246 GURL referrer_url_;
1225 // URL chain of redirects leading to (but not including) |tab_url|. 1247 // URL chain of redirects leading to (but not including) |tab_url|.
1226 std::vector<GURL> tab_redirects_; 1248 std::vector<GURL> tab_redirects_;
1227 // URL and referrer of the window the download was started from. 1249 // URL and referrer of the window the download was started from.
1228 GURL tab_url_; 1250 GURL tab_url_;
1229 GURL tab_referrer_url_; 1251 GURL tab_referrer_url_;
1230 1252
1231 bool archived_executable_; 1253 bool archived_executable_;
1232 ArchiveValid archive_is_valid_; 1254 ArchiveValid archive_is_valid_;
1233 1255
1256 #if defined(OS_MACOSX)
1257 uint64_t disk_image_signature_length_;
1258 std::unique_ptr<uint8_t[]> disk_image_signature_;
1259 #endif
1260
1234 ClientDownloadRequest_SignatureInfo signature_info_; 1261 ClientDownloadRequest_SignatureInfo signature_info_;
1235 std::unique_ptr<ClientDownloadRequest_ImageHeaders> image_headers_; 1262 std::unique_ptr<ClientDownloadRequest_ImageHeaders> image_headers_;
1236 google::protobuf::RepeatedPtrField<ClientDownloadRequest_ArchivedBinary> 1263 google::protobuf::RepeatedPtrField<ClientDownloadRequest_ArchivedBinary>
1237 archived_binary_; 1264 archived_binary_;
1238 CheckDownloadCallback callback_; 1265 CheckDownloadCallback callback_;
1239 // Will be NULL if the request has been canceled. 1266 // Will be NULL if the request has been canceled.
1240 DownloadProtectionService* service_; 1267 DownloadProtectionService* service_;
1241 scoped_refptr<BinaryFeatureExtractor> binary_feature_extractor_; 1268 scoped_refptr<BinaryFeatureExtractor> binary_feature_extractor_;
1242 scoped_refptr<SafeBrowsingDatabaseManager> database_manager_; 1269 scoped_refptr<SafeBrowsingDatabaseManager> database_manager_;
1243 const bool pingback_enabled_; 1270 const bool pingback_enabled_;
(...skipping 747 matching lines...) Expand 10 before | Expand all | Expand 10 after
1991 out_request->mutable_referrer_chain()); 2018 out_request->mutable_referrer_chain());
1992 UMA_HISTOGRAM_COUNTS_100( 2019 UMA_HISTOGRAM_COUNTS_100(
1993 "SafeBrowsing.ReferrerURLChainSize.PPAPIDownloadAttribution", 2020 "SafeBrowsing.ReferrerURLChainSize.PPAPIDownloadAttribution",
1994 out_request->referrer_chain_size()); 2021 out_request->referrer_chain_size());
1995 UMA_HISTOGRAM_ENUMERATION( 2022 UMA_HISTOGRAM_ENUMERATION(
1996 "SafeBrowsing.ReferrerAttributionResult.PPAPIDownloadAttribution", result, 2023 "SafeBrowsing.ReferrerAttributionResult.PPAPIDownloadAttribution", result,
1997 SafeBrowsingNavigationObserverManager::ATTRIBUTION_FAILURE_TYPE_MAX); 2024 SafeBrowsingNavigationObserverManager::ATTRIBUTION_FAILURE_TYPE_MAX);
1998 } 2025 }
1999 2026
2000 } // namespace safe_browsing 2027 } // namespace safe_browsing
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698