SlideShare a Scribd company logo
Automating Enterprise Wireless
Deployments
Macsysadmin 2013
Zack Smith
@acidprime
Thursday, September 19, 13
Thanks to:
Andrew Seago
@andrewseago
Arek Sokol
@macbrained
Matt Johnson
@macitmatt
Jason Bush
@jhbush1973
(Some other people at Apple)
Thursday, September 19, 13
Why wireless security?
Thursday, September 19, 13
Why wireless security?
Thursday, September 19, 13
Wireless standards
‱WEP (Why bother)
‱WPA/WPA2 (Personal)
‱WPA/WPA2 (Enterprise)
Thursday, September 19, 13
Manual Entry Sucks
Thursday, September 19, 13
networksetup differences
# Leopard Code
if osVersion['minor'] == LEOP:
leopardRemoveWireless(network)
# Snow Leopard Code
if osVersion['minor'] == SNOW:
snowLeopardRemoveWireless(network)
# Lion code
if osVersion['minor'] == LION:
lionRemoveWireless(network)
# Mountain Lion Code
if osVersion['minor'] == MLION:
lionRemoveWireless(network)
Thursday, September 19, 13
Remove or Add Networks
wiïŹutil --plist="settings.plist"
Thursday, September 19, 13
Remove or Add Networks
wiïŹutil --plist="settings.plist"
Thursday, September 19, 13
Remove or Add Networks
wiïŹutil --plist="settings.plist"
Thursday, September 19, 13
Passwords are a problem not a solution
Thursday, September 19, 13
Passwords are a problem not a solution
Thursday, September 19, 13
Three A’s
‱Authentication
‱Authorization
‱Auditing
Thursday, September 19, 13
Usernames and Passwords
Thursday, September 19, 13
WPA2 Example
wiïŹutil --username=zsmith --password='d0gc4t' --plist=settings.plist
Thursday, September 19, 13
10.5 / 10.6 Plist Manipulation
/Library/Preferences/SystemConïŹguration/com.apple.airport.preferences.plist
plist['KnownNetworks'][guid]['SSID_STR'] = networkDict['ssid']
plist['KnownNetworks'][guid]['SecurityType'] = networkDict['sect']
Thursday, September 19, 13
10.7 + ProïŹles
Thursday, September 19, 13
if networkDict['type'] == 'WPA2 Enterprise':
# Generate the profile
exportLionProfile = genLionProfile(networkDict)
arguments = [
profiles,
"-I",
"-v",
"-f",
'-F',
exportLionProfile
]
profilesExecute(arguments)
# Removing the temp profile
os.remove(exportLionProfile)
Thursday, September 19, 13
Demo: Self Service Portal
Thursday, September 19, 13
Demo: PasswordUtility
Thursday, September 19, 13
Issues with User authentication
Thursday, September 19, 13
Issues with User authentication
‱Password rotation
Thursday, September 19, 13
Issues with User authentication
‱Password rotation
‱Help Desk password changes
Thursday, September 19, 13
Issues with User authentication
‱Password rotation
‱Help Desk password changes
‱Mass password changes
Thursday, September 19, 13
Using Machine Password
dsconfigad -passinterval 0
Thursday, September 19, 13
Auto Enrollment
Thursday, September 19, 13
Auto Enrollment
Thursday, September 19, 13
CertiïŹcite Authority Web
Enrollment
Thursday, September 19, 13
Windows Integrated
Authentication
‱ SPNEGO
‱ Kerberos
‱ curl --negotiate
Thursday, September 19, 13
Windows Integrated
Authentication
‱ SPNEGO
‱ Kerberos
‱ curl --negotiate
Thursday, September 19, 13
SPNEGO Negotiation
‱reverse DNS
‱time
‱Able to contact KDC
curl win-7po3b92m2fp.wallcity.org
Thursday, September 19, 13
ca.ad.com/certsrv
Thursday, September 19, 13
ca.ad.com/certsrv
Thursday, September 19, 13
CertiïŹcate templates
‱ http://technet.microsoft.com/en-us/library/cc730826(v=ws.10).aspx
Thursday, September 19, 13
CertiïŹcate templates
‱ http://technet.microsoft.com/en-us/library/cc730826(v=ws.10).aspx
Thursday, September 19, 13
RADIUS Testing
‱ radtest user password rad.ad.com 0 sharedscret
‱ radtest -t mschap user password rad.ad.com 0 sharedscret
Thursday, September 19, 13
Access CertiïŹcate Templates
‱ Replicated via Active Directory
‱ Access control lists for CertiïŹcate
Templates ( different then RADIUS)
Thursday, September 19, 13
Machine vs User template
curl -d
"CertAttrib=CertiïŹcateTemplate:
User%20CertiïŹcate"
...
Thursday, September 19, 13
Machine vs User template
curl -d
"CertAttrib=CertiïŹcateTemplate:
User%20CertiïŹcate"
...
Thursday, September 19, 13
Submit a CSR
curl -d "CertRequest=
${ENCODED_CSR}"
...
Thursday, September 19, 13
Submit a CSR
curl -d "CertRequest=
${ENCODED_CSR}"
...
Thursday, September 19, 13
Machine TGT
/usr/bin/kinit -k M-084737$
Thursday, September 19, 13
LDAP
TGTHTTP
Thursday, September 19, 13
LDAP
TGT HTTP
Thursday, September 19, 13
LDAP
TGT HTTP
Thursday, September 19, 13
LDAP
TGT
curl
HTTP
Thursday, September 19, 13
LDAP
TGT
curl
HTTP
Thursday, September 19, 13
LDAP
TGT
curl
HTTP
Thursday, September 19, 13
LDAP
TGT
curl
HTTP
Thursday, September 19, 13
LDAP
TGT
curl
HTTP
Thursday, September 19, 13
LDAP
TGT
curl
HTTP
Thursday, September 19, 13
LDAP
TGT
curl
HTTP
Thursday, September 19, 13
Request ID
‱ "${CA_URL}/certnew.cer?ReqID=${REQ_ID}&Enc=b64"
‱ curl --negotiate -u:
‱ reverse DNS required for Kerberos Service Ticket
‱ replication of Domain Contollers
Thursday, September 19, 13
LDAP
curl HTTP
Thursday, September 19, 13
LDAP
curl HTTP
Thursday, September 19, 13
LDAP
curl HTTP
Thursday, September 19, 13
LDAP
curl HTTP
Thursday, September 19, 13
LDAP
curl HTTP
Thursday, September 19, 13
userCertiïŹcate attribute
dscl localhost read /Search/Computers/M-938747$
userCertiïŹcate
Thursday, September 19, 13
Convert from DER to PEM
‱openssl
‱dscl
‱xxd or just binascii in python
Thursday, September 19, 13
LDAP
dscl
Thursday, September 19, 13
LDAP
dscl
Thursday, September 19, 13
LDAPdscl
Thursday, September 19, 13
LDAP
dscl
Thursday, September 19, 13
security
Thursday, September 19, 13
LDAP
Thursday, September 19, 13
LDAP
Thursday, September 19, 13
LDAP
Thursday, September 19, 13
LDAP
Thursday, September 19, 13
LDAP
Thursday, September 19, 13
LDAP
Thursday, September 19, 13
LDAP
Thursday, September 19, 13
ADCertiïŹcatePayloadPlugin
‱ Introduces on 10.7
‱ Supports Machine TGT style authentication
‱ Limited scope of OS Support deprecated in favor of DCE/RPC
Thursday, September 19, 13
DCE/RPC
Distributed Computing Environment / Remote Procedure Call
Thursday, September 19, 13
To Do
‱wiïŹutil --autoenroll curl
‱wiïŹutil --autoenroll proïŹle
Thursday, September 19, 13
Common Issues
‱ Machine joins with same Mac Address (join existing account)
‱ CertiïŹcate Expiration (set by template)
‱ eapolclient needs keychain ACL set in older operating systems
‱ security -k not honored in 10.7 or 10.8 ( Keys exportable )
Thursday, September 19, 13
Debugging
/System/Library/C/S/airport debug +AllUserland
LogLevel in com.apple.eap.proïŹles.plist
/var/log/eapolclient
http://pastie.org/pastes/265251
Thursday, September 19, 13
Open Source Solutions
‱ openssl command line ( or I guess the CertiïŹcate Assistant)
‱ IPA - (389 Directory Server, MIT Kerberos, NTP, DNS,
Dogtag certiïŹcate system, SSSD and others.)
‱ http://www.freeipa.org
Thursday, September 19, 13
Puppet as a CertiïŹcate Authority
‱ puppet agent -t (submits the certiïŹcate signing request)
‱puppet cert --sign agent.puppetlabs.com
‱puppet cert --generate ipad.puppetlabs.com
Thursday, September 19, 13
StrongSWAN
Thursday, September 19, 13
Network Device Enrollment
Thursday, September 19, 13
Thursday, September 19, 13
Thursday, September 19, 13
WirelessConïŹg
http://tinyurl.com/bananas13
Thursday, September 19, 13

More Related Content

PDF
Asyncifying WebAssembly for the modern Web
PDF
Hyper-Efficient Mac Deployment
PDF
Provisioning profiles like a Pro
PDF
Angrybirds - Overview for a High Performance Shop
 
PDF
Ruby meetup 7_years_in_testing
PPTX
Router hardening project.slide
PDF
Exploring the Possibilities of Sencha and WebRTC
PDF
OpenSIPS Workshop
Asyncifying WebAssembly for the modern Web
Hyper-Efficient Mac Deployment
Provisioning profiles like a Pro
Angrybirds - Overview for a High Performance Shop
 
Ruby meetup 7_years_in_testing
Router hardening project.slide
Exploring the Possibilities of Sencha and WebRTC
OpenSIPS Workshop

Similar to Automating Enterprise Wireless Deployments (20)

PDF
Cassandra Meetup: Real-time Analytics using Cassandra, Spark and Shark at Ooyala
PDF
Continuous Delivery at Netflix
PDF
Web Performance Optimization @Develer
PDF
Core Bluetooth on iOS
PDF
Building a platform with Django, Docker and Salt | Djangocon lightning talk
PDF
Building a Platform with Django, Docker and Salt
PDF
Wi-Fi Denver OWASP Presentation Feb. 15, 2017
PDF
How automated cloud infrastructure setups can help with Continuous Delivery
PDF
CIW Lab with CoheisveFT: Get started in public cloud - Part 2 Hands On
PDF
Chef - Configuration Management for the Cloud
PDF
RIA security based on OWASP Top 10
PDF
Keeping your rack cool
PDF
Keeping your rack cool with one "/IP route rule"
PDF
Installing postgres & postgis
PPTX
Pxosys Webinar Amplify your Security
PDF
Kamailio on Docker
PDF
NATO IST Symposium 2013
PDF
SIP2SIP: SIP gratis para las masas
PDF
V2 d2013 saĂșl ibarra - sip2sip
PDF
[jqconatx] Adaptive Images for Responsive Web Design
Cassandra Meetup: Real-time Analytics using Cassandra, Spark and Shark at Ooyala
Continuous Delivery at Netflix
Web Performance Optimization @Develer
Core Bluetooth on iOS
Building a platform with Django, Docker and Salt | Djangocon lightning talk
Building a Platform with Django, Docker and Salt
Wi-Fi Denver OWASP Presentation Feb. 15, 2017
How automated cloud infrastructure setups can help with Continuous Delivery
CIW Lab with CoheisveFT: Get started in public cloud - Part 2 Hands On
Chef - Configuration Management for the Cloud
RIA security based on OWASP Top 10
Keeping your rack cool
Keeping your rack cool with one "/IP route rule"
Installing postgres & postgis
Pxosys Webinar Amplify your Security
Kamailio on Docker
NATO IST Symposium 2013
SIP2SIP: SIP gratis para las masas
V2 d2013 saĂșl ibarra - sip2sip
[jqconatx] Adaptive Images for Responsive Web Design
Ad

Recently uploaded (20)

PDF
project resource management chapter-09.pdf
PDF
NewMind AI Weekly Chronicles – August ’25 Week III
PDF
From MVP to Full-Scale Product A Startup’s Software Journey.pdf
 
PPTX
1. Introduction to Computer Programming.pptx
PDF
Univ-Connecticut-ChatGPT-Presentaion.pdf
PPTX
Modernising the Digital Integration Hub
PDF
TrustArc Webinar - Click, Consent, Trust: Winning the Privacy Game
PPTX
TLE Review Electricity (Electricity).pptx
PDF
Architecture types and enterprise applications.pdf
PPTX
O2C Customer Invoices to Receipt V15A.pptx
PDF
Hindi spoken digit analysis for native and non-native speakers
PDF
NewMind AI Weekly Chronicles - August'25-Week II
PDF
Hybrid model detection and classification of lung cancer
PDF
Web App vs Mobile App What Should You Build First.pdf
 
PDF
gpt5_lecture_notes_comprehensive_20250812015547.pdf
PPTX
The various Industrial Revolutions .pptx
PDF
2021 HotChips TSMC Packaging Technologies for Chiplets and 3D_0819 publish_pu...
 
PPT
Module 1.ppt Iot fundamentals and Architecture
PDF
Developing a website for English-speaking practice to English as a foreign la...
PPTX
Chapter 5: Probability Theory and Statistics
project resource management chapter-09.pdf
NewMind AI Weekly Chronicles – August ’25 Week III
From MVP to Full-Scale Product A Startup’s Software Journey.pdf
 
1. Introduction to Computer Programming.pptx
Univ-Connecticut-ChatGPT-Presentaion.pdf
Modernising the Digital Integration Hub
TrustArc Webinar - Click, Consent, Trust: Winning the Privacy Game
TLE Review Electricity (Electricity).pptx
Architecture types and enterprise applications.pdf
O2C Customer Invoices to Receipt V15A.pptx
Hindi spoken digit analysis for native and non-native speakers
NewMind AI Weekly Chronicles - August'25-Week II
Hybrid model detection and classification of lung cancer
Web App vs Mobile App What Should You Build First.pdf
 
gpt5_lecture_notes_comprehensive_20250812015547.pdf
The various Industrial Revolutions .pptx
2021 HotChips TSMC Packaging Technologies for Chiplets and 3D_0819 publish_pu...
 
Module 1.ppt Iot fundamentals and Architecture
Developing a website for English-speaking practice to English as a foreign la...
Chapter 5: Probability Theory and Statistics
Ad

Automating Enterprise Wireless Deployments