Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Swift and Stack smashing protection

How to enable Stack Smashing Protection in pure swift application?

I did try to put "-fstack-protector-all" flag to Other C++ Flags under project build settings tab in xCode, but is seems that, this flag is unused or have no impact on builded application.

To verifie build I'm using otool -Iv AppBinary | grep stack.

like image 841
Daniel Sumara Avatar asked Jul 25 '16 10:07

Daniel Sumara


2 Answers

In Swift, Stack smashing is enabled by default one only need to add the "-fstack-protector-all" flag under build settings in objective-c applications.

How to check if stack smashing is enabled. Run the otool command and presence of stack_chk_guard and stack_chk_fail means the code is stack smashing protected.

$ otool -Iv <appname>|grep stack
0x0013dfg   520 ___stack_chk_fail
0x001d009   521 ___stack_chk_guard
0x001fd345   520 ___stack_chk_fail
0x000000010087efd   513 ___stack_chk_fail
0x0000000100098hf3 514 ___stack_chk_guard
0x00000001000897gfr   513 ___stack_chk_fail
like image 129
Joe Avatar answered Sep 28 '22 10:09

Joe


I was also facing this in my 100% Swift project.

Whenever I added -fstack-protector-all to the "Other C-Flags" Build Settings the flags did not show up in the binary as described in the other comments.

enter image description here

What I did was to create an Objective-C Class…

// DummyClassForSSP.h
#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

@interface DummyClassForSSP : NSObject
+ (void)dummyCallSoFlagsShowUpInIPA;
@end

NS_ASSUME_NONNULL_END

… added a dummy implementation …

// DummyClassForSSP.m
#import "DummyClassForSSP.h"

@implementation DummyClassForSSP

+ (void)dummyCallSoFlagsShowUpInIPA {}

@end

… and called it from my AppDelegate.

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
....
DummyClassForSSP.dummyCallSoFlagsShowUpInIPA()
...
}

After that the flags showed up as described.

like image 29
btype Avatar answered Sep 28 '22 10:09

btype