vlc | branch: master | David Fuhrmann <[email protected]> | Tue Oct 23 
23:21:41 2018 +0200| [77548a174cea044f4a4a1909c3e9371df44d1e6d] | committer: 
David Fuhrmann

macOS codesign: Add option to enable runtime hardening for macOS Mojave

Runtime hardening restricts what the application can do, while not being
a full sandbox. For instance, only signed code is loaded by default, and
certain personal data is restricted in access.

The following flags / options are set for now:
- Allow execution of JIT code: For Lua Scripts
- Disable library validation: libaries are also loaded if they are signed
  by the developer certificate of another developer, not from VideoLAN
  (still, unsigned libs are not loaded anymore)
- Audio input access: For qtsound
- Camera access: For avcapture
- Apple Events: To control iTunes and Spotify

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=77548a174cea044f4a4a1909c3e9371df44d1e6d
---

 extras/package/macosx/VLC.xcodeproj/project.pbxproj | 17 +++++++++++++++--
 extras/package/macosx/codesign.sh                   | 13 +++++++++++--
 extras/package/macosx/package.mak                   |  1 +
 extras/package/macosx/vlc-hardening.entitlements    | 16 ++++++++++++++++
 4 files changed, 43 insertions(+), 4 deletions(-)

diff --git a/extras/package/macosx/VLC.xcodeproj/project.pbxproj 
b/extras/package/macosx/VLC.xcodeproj/project.pbxproj
index e12ff37933..7dcbd72816 100644
--- a/extras/package/macosx/VLC.xcodeproj/project.pbxproj
+++ b/extras/package/macosx/VLC.xcodeproj/project.pbxproj
@@ -160,6 +160,7 @@
                1C67C8A71D58C0A40079E1C1 /* VLCAboutWindowController.m */ = 
{isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = 
sourcecode.c.objc; path = VLCAboutWindowController.m; sourceTree = "<group>"; };
                1C7CB91A1D787E7600388902 /* VLCPopupPanelController.h */ = {isa 
= PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path 
= VLCPopupPanelController.h; sourceTree = "<group>"; };
                1C7CB91B1D787E7600388902 /* VLCPopupPanelController.m */ = {isa 
= PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; 
path = VLCPopupPanelController.m; sourceTree = "<group>"; };
+               1C864182217D318900D2CF7C /* vlc-hardening.entitlements */ = 
{isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = 
"vlc-hardening.entitlements"; sourceTree = "<group>"; };
                1CAC3EE620CD1B3B00613DB2 /* VLCVideoOutputProvider.m */ = {isa 
= PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; 
path = VLCVideoOutputProvider.m; sourceTree = "<group>"; };
                1CAC3EE720CD1B3B00613DB2 /* VLCVideoOutputProvider.h */ = {isa 
= PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path 
= VLCVideoOutputProvider.h; sourceTree = "<group>"; };
                1CAEBBFF1E1EC0A400A99E49 /* VLCFSPanelDraggableView.h */ = {isa 
= PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path 
= VLCFSPanelDraggableView.h; sourceTree = "<group>"; };
@@ -578,6 +579,7 @@
                089C166AFE841209C02AAC07 /* vlc */ = {
                        isa = PBXGroup;
                        children = (
+                               1C864182217D318900D2CF7C /* 
vlc-hardening.entitlements */,
                                CC6C01A40DDF3E7800C7D754 /* Minimal macOS 
interface */,
                                CCC8957F0D9A8A61005AE59C /* macOS-specific 
libvlc source files */,
                                08FB77AFFE84173DC02AAC07 /* macOS Interface 
Classes */,
@@ -1540,10 +1542,15 @@
                                TargetAttributes = {
                                        1CCB5F2E1A62A6A5004C3E90 = {
                                                CreatedOnToolsVersion = 6.1.1;
+                                               SystemCapabilities = {
+                                                       
com.apple.HardenedRuntime = {
+                                                               enabled = 1;
+                                                       };
+                                               };
                                        };
                                };
                        };
-                       buildConfigurationList = C2F2A6EA09588F1B00018C74 /* 
Build configuration list for PBXProject "VLC" */;
+                       buildConfigurationList = C2F2A6EA09588F1B00018C74 /* 
Build configuration list for PBXProject "vlc" */;
                        compatibilityVersion = "Xcode 6.3";
                        developmentRegion = English;
                        hasScannedForEncodings = 1;
@@ -1696,9 +1703,11 @@
                        buildSettings = {
                                ALWAYS_SEARCH_USER_PATHS = NO;
                                CLANG_ENABLE_OBJC_ARC = YES;
+                               CODE_SIGN_ENTITLEMENTS = 
"vlc-hardening.entitlements";
                                CODE_SIGN_IDENTITY = "";
                                COMBINE_HIDPI_IMAGES = YES;
                                COPY_PHASE_STRIP = NO;
+                               ENABLE_HARDENED_RUNTIME = YES;
                                FRAMEWORK_SEARCH_PATHS = 
"${VLC_SRC_DIR}/contrib/${VLC_BUILD_TRIPLET}/Frameworks";
                                GCC_PREPROCESSOR_DEFINITIONS = (
                                        "HAVE_CONFIG_H=1",
@@ -1731,10 +1740,12 @@
                        buildSettings = {
                                ALWAYS_SEARCH_USER_PATHS = NO;
                                CLANG_ENABLE_OBJC_ARC = YES;
+                               CODE_SIGN_ENTITLEMENTS = 
"vlc-hardening.entitlements";
                                CODE_SIGN_IDENTITY = "";
                                COMBINE_HIDPI_IMAGES = YES;
                                COPY_PHASE_STRIP = YES;
                                DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+                               ENABLE_HARDENED_RUNTIME = YES;
                                FRAMEWORK_SEARCH_PATHS = 
"${VLC_SRC_DIR}/contrib/${VLC_BUILD_TRIPLET}/Frameworks";
                                GCC_PREPROCESSOR_DEFINITIONS = (
                                        "HAVE_CONFIG_H=1",
@@ -1766,10 +1777,12 @@
                        buildSettings = {
                                ALWAYS_SEARCH_USER_PATHS = NO;
                                CLANG_ENABLE_OBJC_ARC = YES;
+                               CODE_SIGN_ENTITLEMENTS = 
"vlc-hardening.entitlements";
                                CODE_SIGN_IDENTITY = "";
                                COMBINE_HIDPI_IMAGES = YES;
                                COPY_PHASE_STRIP = YES;
                                DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+                               ENABLE_HARDENED_RUNTIME = YES;
                                FRAMEWORK_SEARCH_PATHS = 
"${VLC_SRC_DIR}/contrib/${VLC_BUILD_TRIPLET}/Frameworks";
                                GCC_PREPROCESSOR_DEFINITIONS = (
                                        "HAVE_CONFIG_H=1",
@@ -1955,7 +1968,7 @@
                        defaultConfigurationIsVisible = 0;
                        defaultConfigurationName = Default;
                };
-               C2F2A6EA09588F1B00018C74 /* Build configuration list for 
PBXProject "VLC" */ = {
+               C2F2A6EA09588F1B00018C74 /* Build configuration list for 
PBXProject "vlc" */ = {
                        isa = XCConfigurationList;
                        buildConfigurations = (
                                C2F2A6EB09588F1B00018C74 /* Development */,
diff --git a/extras/package/macosx/codesign.sh 
b/extras/package/macosx/codesign.sh
index 267314a05b..f6b5a3a8cc 100755
--- a/extras/package/macosx/codesign.sh
+++ b/extras/package/macosx/codesign.sh
@@ -37,11 +37,12 @@ OPTIONS:
    -h            Show this help
    -i            Identity to use
    -g            Developer ID certificate mode (validates with Gatekeeper)
+   -r            Enable runtime hardening
 EOF
 
 }
 
-while getopts "hi:g" OPTION
+while getopts "hi:gr" OPTION
 do
      case $OPTION in
          h)
@@ -54,6 +55,9 @@ do
          g)
              GK="yes"
          ;;
+         r)
+             RUNTIME="yes"
+         ;;
          *)
              usage
              exit 1
@@ -79,12 +83,17 @@ if [ -z "$VLCCACHEGEN" ]; then
 info "WARN: Cannot find vlc-cache-gen, cache will be corrupt after signing"
 fi
 
+SCRIPTDIR=$(dirname "$0")
+if [ ! -z "$RUNTIME" ]; then
+RUNTIME_FLAGS="--options runtime --entitlements 
$SCRIPTDIR/vlc-hardening.entitlements"
+fi
+
 # Call with $1 = file or folder
 sign()
 {
     # info "Signing file $1 with identifier $IDENTIFIER"
 
-    codesign --force --verbose -s "$IDENTITY" "$1"
+    codesign --force --verbose $RUNTIME_FLAGS -s "$IDENTITY" "$1"
 }
 
 
diff --git a/extras/package/macosx/package.mak 
b/extras/package/macosx/package.mak
index a2b1bf2a66..8b42a228cd 100644
--- a/extras/package/macosx/package.mak
+++ b/extras/package/macosx/package.mak
@@ -94,6 +94,7 @@ package-macosx-release:
        cp -Rp $(top_builddir)/VLC.app $(top_builddir)/vlc-$(VERSION)-release/
        cp $(srcdir)/extras/package/macosx/dmg/* 
$(top_builddir)/vlc-$(VERSION)-release/
        cp "$(srcdir)/extras/package/macosx/codesign.sh" 
$(top_builddir)/vlc-$(VERSION)-release/
+       cp "$(srcdir)/extras/package/macosx/vlc-hardening.entitlements" 
$(top_builddir)/vlc-$(VERSION)-release/
        cp "$(pkglibexecdir)/vlc-cache-gen" 
$(top_builddir)/vlc-$(VERSION)-release/
        install_name_tool -add_rpath 
"@executable_path/VLC.app/Contents/MacOS/lib" 
$(top_builddir)/vlc-$(VERSION)-release/vlc-cache-gen
        zip -r -y -9 $(top_builddir)/vlc-$(VERSION)-release.zip 
$(top_builddir)/vlc-$(VERSION)-release
diff --git a/extras/package/macosx/vlc-hardening.entitlements 
b/extras/package/macosx/vlc-hardening.entitlements
new file mode 100644
index 0000000000..592327e2f8
--- /dev/null
+++ b/extras/package/macosx/vlc-hardening.entitlements
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" 
"http://www.apple.com/DTDs/PropertyList-1.0.dtd";>
+<plist version="1.0">
+<dict>
+       <key>com.apple.security.automation.apple-events</key>
+       <true/>
+       <key>com.apple.security.cs.allow-jit</key>
+       <true/>
+       <key>com.apple.security.cs.disable-library-validation</key>
+       <true/>
+       <key>com.apple.security.device.audio-input</key>
+       <true/>
+       <key>com.apple.security.device.camera</key>
+       <true/>
+</dict>
+</plist>

_______________________________________________
vlc-commits mailing list
[email protected]
https://mailman.videolan.org/listinfo/vlc-commits

Reply via email to