SlideShare a Scribd company logo
Tailored Source Code 
Transformations to Synthesize 
Computationally Diverse Program 
Variants 
Benoit Baudry, Simon Allier, Martin Monperrus
• This talk is about the generation of very large 
quantities of sosie programs 
2
sosie program 
• Given a specification S 
3
sosie program 
4 
• Given a specification S 
• Given a program P 
that conforms to S 
specified 
correct 
behavior 
bugs, vulnerabilities 
expected behavior
sosie program 
5 
• Given a specification S 
• Given a program P 
that conforms to S 
• A sosie of P is a 
variant of P that also 
conforms to S 
a sosie
Motivation 
• Explore brittelness vs. 
plasticity of software 
• Large quantities of 
diverse variants 
• Moving target 
• Failure detection 
computation failure diversity 6 
diversity
Software brittleness 
7 
SRSLSLRSRLLSSRRLRL 
G. Berry. « A la chasse aux bugs, la maladie du certain » (8 juin 2011)
Software brittleness hypothesis 
8 
SRSLSLRSRLLSSRRLRL 
G. Berry. « A la chasse aux bugs, la maladie du certain » (8 juin 2011)
Software brittleness hypothesis 
9 
SRSLSLRSRLLSSRRLRL 
SRSLSLSSRLLSSRRLRL 
G. Berry. « A la chasse aux bugs, la maladie du certain » (8 juin 2011)
Software brittleness hypothesis 
10 
SRSLSLRSRLLSSRRLRL 
SRSLSLSSRLLSSRRLRL 
G. Berry. « A la chasse aux bugs, la maladie du certain » (8 juin 2011)
Software brittleness 
11
12
Software plasticity hypothesis 
13
Software plasticity hypothesis 
14 
SRSLSLRSRLLSSRRLRL 
SRSLSLSSRLLSSRRLRL 
Rinard et al. 
ICSE’10, 
FSE’11 
POPL’12, 
PLDI’14 
sosie
Specification: data and properties 
fun : Function 
assert abs(fun(.5) - 0.25) < 0.05 
assert abs(fun(.4) - 0.16) < 0.05 
assert abs(fun(.3) - 0.09) < 0.05 
l The test input data specifies the input domain 
l The assertions specify the level of abstraction
Research questions 
Do sosies exist? 
Can we automatically synthesize them? 
What are effective transformations? 
16
Sosiefication process 
17 
7UDQVIRUPDWLRQ 
RQILJXUDWLRQ 
RYHUDJHKHFN RSWLRQDO
7UDQVIRUPDWLRQ 
6RVLHKHFN 
3URJUDP3 
9DULDQW3¶ 
6RVLH3¶ 
6SHFLILFDWLRQ 
7HVW6XLWH
3URJUDP 
7UDQVIRUPDWLRQ 
GHJHQHUDWHG 
YDULDQW3¶ 
RPSLODWLRQ 
RN 
,QSXW 
VWHS 
2XWSXW 
VWHS 
VWHS 
PHWULFV
Automatic Synthesis of Sosies 
l We add/deleted/replace a given statement by another 
one and see whether all assertions remain satisfied 
l we pick code from the same program 
l Four strategies 
l random 
l wittgenstein: replace with variables that have the same name 
l reaction: replace with variables that have the same type 
l steroid: reaction + rename variables
Experimental data 
19 
#test 
cases 
#assert 
coverage 
#statement 
compile 
1me 
test 
1me 
Junit 
721 
1535 
82% 
2914 
4.5 
14.4 
EasyMock 
617 
924 
91% 
2042 
4 
7.8 
Dagger 
(core) 
128 
210 
85% 
674 
5.1 
11.2 
JBehave-­‐core 
485 
1451 
89% 
4984 
5.5 
22.9 
Metrics 
214 
312 
79% 
1471 
4.7 
7.7 
commons-­‐ 
collec1ons 
1121 
5397 
84% 
9893 
7.9 
22.9 
commons-­‐lang 
2359 
13681 
94% 
11715 
6.3 
24.6 
commons-­‐math 
3544 
9559 
92% 
47065 
9.2 
144.2 
clojure 
NA 
NA 
71% 
18533 
105.1 
185
20 
nb of trial: 298938 
nb of compile: 81394 
nb of sosie: 28805 (10%) 
don’t compile 
don’t pass all test cases 
sosies
Computation diversity 
• Goal: unpredictability of 
execution flow 
• Computation monitoring: 
• method calls diversity 
• variable diversity 
21 
A.foo() 
IndexedCollection.retainAll(Collection) 
AbstractCollectionDecorator.retainAll(Collection) 
AbstractCollectionDecorator.decorated() 
other calls 
original call 
IndexedCollection.reindex() 
... 
sosie call 
other calls
22 
Easymock: 465 sosies 
Dagger: 481 sosies 
Junit: 446 sosies
Conclusion 
• Sosies exist 
• for all programs 
• Sosies can exhibit computation diversity 
• Next steps 
• variability-aware execution 
• is computational diversity unbounded? 
23 
https://github.com/DIVERSIFY-project/sosies-generator 
http://diversify-project.eu/sosiefied-programs/
References 
• Zeyuan Allen Zhu, Sasa Misailovic, Jonathan A. 
Kelner, Martin C. Rinard: Randomized accuracy-aware 
program transformations for efficient 
approximate computations. POPL 2012: 441-454 
• Eric Schulte, Jonathan Dorn, Stephen Harding, 
Stephanie Forrest, Westley Weimer: Post-compiler 
software optimization for reducing energy. 
ASPLOS 2014: 639-652 
• Frederick B Cohen: Operating system protection 
through program evolution. Computers  Security 
12, 6 (1993): 565–584. 
24
25
Sosies on line 
• MDMS 
• simple blog app 
• JS on client and server sides 
• Server side stack 
• JS 
• Java 
• DB 
• environment 
26 
MDMS 
RingoJS 
Rhino 
JVM 
Redis DB 
OS
Sosies on line 
• Monoculture 
• multiple instances 
for performance 
• load balancer 
• all instances are 
clones 
27 
Internet 
http request 
Nginx load balancer 
config 0 config 0 config 0 
config 0 config 0 config 0
Sosies on line 
• Diversified 
deployment 
• All server instances 
are different 
• Combine natural 
and artificial 
diversity 
28 
Internet 
http request 
Nginx load balancer 
config 1 config 2 config 3 
config 4 config 5 config 6
29
Reactions graph 
• Reactions graph 
• one node per reaction 
• there is an edge between n1 and n2 if 
n2.in_context == n1.in_context ∨ 
n1.out_context 
30 
R1 
(int) 
code 
(boolean) 
R2 
(boolean) 
code 
(int)

More Related Content

PPTX
Access pattern of tags
Harish Chetty
 
PPT
VNUS Workshop Jordan2010
James Lawson MD /PhD
 
PPTX
Advances In Varicose Vein Treatment
guestad3816b5
 
PDF
Artificial software diversity: automatic synthesis of program sosies
FoCAS Initiative
 
PDF
Nurturing the Software Ecosystems of the Future
Tom Mens
 
PDF
Let the CI spot the holes in tested code with the Descartes tool
Oscar Luis Vera Pérez
 
PDF
Software Analytics - Achievements and Challenges
Tao Xie
 
PDF
Changes and Bugs: Mining and Predicting Development Activities
Thomas Zimmermann
 
Access pattern of tags
Harish Chetty
 
VNUS Workshop Jordan2010
James Lawson MD /PhD
 
Advances In Varicose Vein Treatment
guestad3816b5
 
Artificial software diversity: automatic synthesis of program sosies
FoCAS Initiative
 
Nurturing the Software Ecosystems of the Future
Tom Mens
 
Let the CI spot the holes in tested code with the Descartes tool
Oscar Luis Vera Pérez
 
Software Analytics - Achievements and Challenges
Tao Xie
 
Changes and Bugs: Mining and Predicting Development Activities
Thomas Zimmermann
 

Similar to Tailored source-code-transformation-synthesize-computationally-diverse-program-variants (20)

PDF
nullcon 2011 - Fuzzing with Complexities
n|u - The Open Security Community
 
PDF
Revisiting the Notion of Diversity in Software Testing
Lionel Briand
 
PDF
Mutation @ Spotify
STAMP Project
 
PPTX
It Does What You Say, Not What You Mean: Lessons From A Decade of Program Repair
Claire Le Goues
 
PDF
SCAM 2012 Keynote Slides on Cooperative Testing and Analysis by Tao Xie
Tao Xie
 
PPT
New software testing-techniques
Fincy V.J
 
DOC
Mohammed Kharma - A flexible framework for quality assurance and testing of s...
Mohammed Kharma
 
PDF
Se research update
Nacha Chondamrongkul
 
PPTX
Testing Technique
Ajeng Savitri
 
PDF
The CI as a partner for test improvement suggestions
Caroline Landry
 
PDF
E.M._Poot
Edward Poot
 
PDF
Pldi09 semantics aware trace analysis
ckamdem
 
PDF
Testing and test case generation by using fuzzy logic and n
IAEME Publication
 
PDF
Changes and Bugs: Mining and Predicting Development Activities
Thomas Zimmermann
 
PDF
Stamp breizhcamp 2019
Caroline Landry
 
PDF
Software testing
Abrianto Nugraha
 
PDF
How static analysis supports quality over 50 million lines of C++ code
cppfrug
 
PDF
Testing untestable code - phpconpl11
Stephan Hochdörfer
 
PDF
"CERT Secure Coding Standards" by Dr. Mark Sherman
Rinaldi Rampen
 
PPT
OCAT: Object Capture based Automated Testing (ISSTA 2010)
Sung Kim
 
nullcon 2011 - Fuzzing with Complexities
n|u - The Open Security Community
 
Revisiting the Notion of Diversity in Software Testing
Lionel Briand
 
Mutation @ Spotify
STAMP Project
 
It Does What You Say, Not What You Mean: Lessons From A Decade of Program Repair
Claire Le Goues
 
SCAM 2012 Keynote Slides on Cooperative Testing and Analysis by Tao Xie
Tao Xie
 
New software testing-techniques
Fincy V.J
 
Mohammed Kharma - A flexible framework for quality assurance and testing of s...
Mohammed Kharma
 
Se research update
Nacha Chondamrongkul
 
Testing Technique
Ajeng Savitri
 
The CI as a partner for test improvement suggestions
Caroline Landry
 
E.M._Poot
Edward Poot
 
Pldi09 semantics aware trace analysis
ckamdem
 
Testing and test case generation by using fuzzy logic and n
IAEME Publication
 
Changes and Bugs: Mining and Predicting Development Activities
Thomas Zimmermann
 
Stamp breizhcamp 2019
Caroline Landry
 
Software testing
Abrianto Nugraha
 
How static analysis supports quality over 50 million lines of C++ code
cppfrug
 
Testing untestable code - phpconpl11
Stephan Hochdörfer
 
"CERT Secure Coding Standards" by Dr. Mark Sherman
Rinaldi Rampen
 
OCAT: Object Capture based Automated Testing (ISSTA 2010)
Sung Kim
 
Ad

More from FoCAS Initiative (20)

PDF
Fundamentals of Collective Adaptive Systems Manifesto
FoCAS Initiative
 
PDF
Final FoCAS Newsletter, Issue Eight, Winter 2016
FoCAS Initiative
 
PDF
Optimal Floor Heating
FoCAS Initiative
 
PDF
Advanced Manufacturing: An Industrial Application for Collective Adaptive Sys...
FoCAS Initiative
 
PDF
FoCAS Newsletter Issue Seven
FoCAS Initiative
 
PDF
Wrangling Complex Systems
FoCAS Initiative
 
PDF
Where Shall We Have Lunch? Problems For A Computer-aided Future
FoCAS Initiative
 
PDF
Sustainability Challenges In A Complex World
FoCAS Initiative
 
PDF
On Manipulating Attractors In Collective Behaviours Of Bio-hybrid Societies W...
FoCAS Initiative
 
PDF
The Liquid Computing Paradigm
FoCAS Initiative
 
PDF
Complexity And The Relationship Between Knowledge And Action
FoCAS Initiative
 
PDF
FoCAS Newsletter Issue Six
FoCAS Initiative
 
PDF
FoCAS Newsletter Issue Five
FoCAS Initiative
 
PDF
Temporal logics for multi-agent systems
FoCAS Initiative
 
PDF
Advanced Systems Engineering
FoCAS Initiative
 
PDF
Search Diverse Models for Proactive Software Diversification
FoCAS Initiative
 
PDF
Modelling Adaptation Policies As Domain-Specific Constraints
FoCAS Initiative
 
PDF
Quantified NTL
FoCAS Initiative
 
PDF
SOCIAL ADAPTATION OF ROBOTS FOR MODULATING SELF-ORGANIZATION IN ANIMAL SOCIETIES
FoCAS Initiative
 
PDF
Scalability Issues of Firefly-Based Self-Synchronization in Collective Adapti...
FoCAS Initiative
 
Fundamentals of Collective Adaptive Systems Manifesto
FoCAS Initiative
 
Final FoCAS Newsletter, Issue Eight, Winter 2016
FoCAS Initiative
 
Optimal Floor Heating
FoCAS Initiative
 
Advanced Manufacturing: An Industrial Application for Collective Adaptive Sys...
FoCAS Initiative
 
FoCAS Newsletter Issue Seven
FoCAS Initiative
 
Wrangling Complex Systems
FoCAS Initiative
 
Where Shall We Have Lunch? Problems For A Computer-aided Future
FoCAS Initiative
 
Sustainability Challenges In A Complex World
FoCAS Initiative
 
On Manipulating Attractors In Collective Behaviours Of Bio-hybrid Societies W...
FoCAS Initiative
 
The Liquid Computing Paradigm
FoCAS Initiative
 
Complexity And The Relationship Between Knowledge And Action
FoCAS Initiative
 
FoCAS Newsletter Issue Six
FoCAS Initiative
 
FoCAS Newsletter Issue Five
FoCAS Initiative
 
Temporal logics for multi-agent systems
FoCAS Initiative
 
Advanced Systems Engineering
FoCAS Initiative
 
Search Diverse Models for Proactive Software Diversification
FoCAS Initiative
 
Modelling Adaptation Policies As Domain-Specific Constraints
FoCAS Initiative
 
Quantified NTL
FoCAS Initiative
 
SOCIAL ADAPTATION OF ROBOTS FOR MODULATING SELF-ORGANIZATION IN ANIMAL SOCIETIES
FoCAS Initiative
 
Scalability Issues of Firefly-Based Self-Synchronization in Collective Adapti...
FoCAS Initiative
 
Ad

Recently uploaded (20)

PDF
How Open Source Changed My Career by abdelrahman ismail
a0m0rajab1
 
PDF
Brief History of Internet - Early Days of Internet
sutharharshit158
 
PDF
Trying to figure out MCP by actually building an app from scratch with open s...
Julien SIMON
 
PDF
Tea4chat - another LLM Project by Kerem Atam
a0m0rajab1
 
PDF
Economic Impact of Data Centres to the Malaysian Economy
flintglobalapac
 
PPTX
What-is-the-World-Wide-Web -- Introduction
tonifi9488
 
PDF
AI-Cloud-Business-Management-Platforms-The-Key-to-Efficiency-Growth.pdf
Artjoker Software Development Company
 
PDF
Google I/O Extended 2025 Baku - all ppts
HusseinMalikMammadli
 
PDF
Security features in Dell, HP, and Lenovo PC systems: A research-based compar...
Principled Technologies
 
PDF
Unlocking the Future- AI Agents Meet Oracle Database 23ai - AIOUG Yatra 2025.pdf
Sandesh Rao
 
PDF
Using Anchore and DefectDojo to Stand Up Your DevSecOps Function
Anchore
 
PDF
Structs to JSON: How Go Powers REST APIs
Emily Achieng
 
PPTX
Applied-Statistics-Mastering-Data-Driven-Decisions.pptx
parmaryashparmaryash
 
PDF
A Strategic Analysis of the MVNO Wave in Emerging Markets.pdf
IPLOOK Networks
 
PPTX
Dev Dives: Automate, test, and deploy in one place—with Unified Developer Exp...
AndreeaTom
 
PDF
Research-Fundamentals-and-Topic-Development.pdf
ayesha butalia
 
PDF
Accelerating Oracle Database 23ai Troubleshooting with Oracle AHF Fleet Insig...
Sandesh Rao
 
PDF
MASTERDECK GRAPHSUMMIT SYDNEY (Public).pdf
Neo4j
 
PPTX
AI and Robotics for Human Well-being.pptx
JAYMIN SUTHAR
 
PDF
OFFOFFBOX™ – A New Era for African Film | Startup Presentation
ambaicciwalkerbrian
 
How Open Source Changed My Career by abdelrahman ismail
a0m0rajab1
 
Brief History of Internet - Early Days of Internet
sutharharshit158
 
Trying to figure out MCP by actually building an app from scratch with open s...
Julien SIMON
 
Tea4chat - another LLM Project by Kerem Atam
a0m0rajab1
 
Economic Impact of Data Centres to the Malaysian Economy
flintglobalapac
 
What-is-the-World-Wide-Web -- Introduction
tonifi9488
 
AI-Cloud-Business-Management-Platforms-The-Key-to-Efficiency-Growth.pdf
Artjoker Software Development Company
 
Google I/O Extended 2025 Baku - all ppts
HusseinMalikMammadli
 
Security features in Dell, HP, and Lenovo PC systems: A research-based compar...
Principled Technologies
 
Unlocking the Future- AI Agents Meet Oracle Database 23ai - AIOUG Yatra 2025.pdf
Sandesh Rao
 
Using Anchore and DefectDojo to Stand Up Your DevSecOps Function
Anchore
 
Structs to JSON: How Go Powers REST APIs
Emily Achieng
 
Applied-Statistics-Mastering-Data-Driven-Decisions.pptx
parmaryashparmaryash
 
A Strategic Analysis of the MVNO Wave in Emerging Markets.pdf
IPLOOK Networks
 
Dev Dives: Automate, test, and deploy in one place—with Unified Developer Exp...
AndreeaTom
 
Research-Fundamentals-and-Topic-Development.pdf
ayesha butalia
 
Accelerating Oracle Database 23ai Troubleshooting with Oracle AHF Fleet Insig...
Sandesh Rao
 
MASTERDECK GRAPHSUMMIT SYDNEY (Public).pdf
Neo4j
 
AI and Robotics for Human Well-being.pptx
JAYMIN SUTHAR
 
OFFOFFBOX™ – A New Era for African Film | Startup Presentation
ambaicciwalkerbrian
 

Tailored source-code-transformation-synthesize-computationally-diverse-program-variants

  • 1. Tailored Source Code Transformations to Synthesize Computationally Diverse Program Variants Benoit Baudry, Simon Allier, Martin Monperrus
  • 2. • This talk is about the generation of very large quantities of sosie programs 2
  • 3. sosie program • Given a specification S 3
  • 4. sosie program 4 • Given a specification S • Given a program P that conforms to S specified correct behavior bugs, vulnerabilities expected behavior
  • 5. sosie program 5 • Given a specification S • Given a program P that conforms to S • A sosie of P is a variant of P that also conforms to S a sosie
  • 6. Motivation • Explore brittelness vs. plasticity of software • Large quantities of diverse variants • Moving target • Failure detection computation failure diversity 6 diversity
  • 7. Software brittleness 7 SRSLSLRSRLLSSRRLRL G. Berry. « A la chasse aux bugs, la maladie du certain » (8 juin 2011)
  • 8. Software brittleness hypothesis 8 SRSLSLRSRLLSSRRLRL G. Berry. « A la chasse aux bugs, la maladie du certain » (8 juin 2011)
  • 9. Software brittleness hypothesis 9 SRSLSLRSRLLSSRRLRL SRSLSLSSRLLSSRRLRL G. Berry. « A la chasse aux bugs, la maladie du certain » (8 juin 2011)
  • 10. Software brittleness hypothesis 10 SRSLSLRSRLLSSRRLRL SRSLSLSSRLLSSRRLRL G. Berry. « A la chasse aux bugs, la maladie du certain » (8 juin 2011)
  • 12. 12
  • 14. Software plasticity hypothesis 14 SRSLSLRSRLLSSRRLRL SRSLSLSSRLLSSRRLRL Rinard et al. ICSE’10, FSE’11 POPL’12, PLDI’14 sosie
  • 15. Specification: data and properties fun : Function assert abs(fun(.5) - 0.25) < 0.05 assert abs(fun(.4) - 0.16) < 0.05 assert abs(fun(.3) - 0.09) < 0.05 l The test input data specifies the input domain l The assertions specify the level of abstraction
  • 16. Research questions Do sosies exist? Can we automatically synthesize them? What are effective transformations? 16
  • 17. Sosiefication process 17 7UDQVIRUPDWLRQ RQILJXUDWLRQ RYHUDJHKHFN RSWLRQDO
  • 18. 7UDQVIRUPDWLRQ 6RVLHKHFN 3URJUDP3 9DULDQW3¶ 6RVLH3¶ 6SHFLILFDWLRQ 7HVW6XLWH
  • 19. 3URJUDP 7UDQVIRUPDWLRQ GHJHQHUDWHG YDULDQW3¶ RPSLODWLRQ RN ,QSXW VWHS 2XWSXW VWHS VWHS PHWULFV
  • 20. Automatic Synthesis of Sosies l We add/deleted/replace a given statement by another one and see whether all assertions remain satisfied l we pick code from the same program l Four strategies l random l wittgenstein: replace with variables that have the same name l reaction: replace with variables that have the same type l steroid: reaction + rename variables
  • 21. Experimental data 19 #test cases #assert coverage #statement compile 1me test 1me Junit 721 1535 82% 2914 4.5 14.4 EasyMock 617 924 91% 2042 4 7.8 Dagger (core) 128 210 85% 674 5.1 11.2 JBehave-­‐core 485 1451 89% 4984 5.5 22.9 Metrics 214 312 79% 1471 4.7 7.7 commons-­‐ collec1ons 1121 5397 84% 9893 7.9 22.9 commons-­‐lang 2359 13681 94% 11715 6.3 24.6 commons-­‐math 3544 9559 92% 47065 9.2 144.2 clojure NA NA 71% 18533 105.1 185
  • 22. 20 nb of trial: 298938 nb of compile: 81394 nb of sosie: 28805 (10%) don’t compile don’t pass all test cases sosies
  • 23. Computation diversity • Goal: unpredictability of execution flow • Computation monitoring: • method calls diversity • variable diversity 21 A.foo() IndexedCollection.retainAll(Collection) AbstractCollectionDecorator.retainAll(Collection) AbstractCollectionDecorator.decorated() other calls original call IndexedCollection.reindex() ... sosie call other calls
  • 24. 22 Easymock: 465 sosies Dagger: 481 sosies Junit: 446 sosies
  • 25. Conclusion • Sosies exist • for all programs • Sosies can exhibit computation diversity • Next steps • variability-aware execution • is computational diversity unbounded? 23 https://github.com/DIVERSIFY-project/sosies-generator http://diversify-project.eu/sosiefied-programs/
  • 26. References • Zeyuan Allen Zhu, Sasa Misailovic, Jonathan A. Kelner, Martin C. Rinard: Randomized accuracy-aware program transformations for efficient approximate computations. POPL 2012: 441-454 • Eric Schulte, Jonathan Dorn, Stephen Harding, Stephanie Forrest, Westley Weimer: Post-compiler software optimization for reducing energy. ASPLOS 2014: 639-652 • Frederick B Cohen: Operating system protection through program evolution. Computers Security 12, 6 (1993): 565–584. 24
  • 27. 25
  • 28. Sosies on line • MDMS • simple blog app • JS on client and server sides • Server side stack • JS • Java • DB • environment 26 MDMS RingoJS Rhino JVM Redis DB OS
  • 29. Sosies on line • Monoculture • multiple instances for performance • load balancer • all instances are clones 27 Internet http request Nginx load balancer config 0 config 0 config 0 config 0 config 0 config 0
  • 30. Sosies on line • Diversified deployment • All server instances are different • Combine natural and artificial diversity 28 Internet http request Nginx load balancer config 1 config 2 config 3 config 4 config 5 config 6
  • 31. 29
  • 32. Reactions graph • Reactions graph • one node per reaction • there is an edge between n1 and n2 if n2.in_context == n1.in_context ∨ n1.out_context 30 R1 (int) code (boolean) R2 (boolean) code (int)
  • 33. 31
  • 34. Two reactions graph (apache.common) • Statement reactions graph • #edges = 12304 • #nodes = 863 • graph-diameter = 3 • avg path length = 1.466 • avg degree = 14.257 • Expression reactions graph • #edges = 37650 • #nodes = 1953 • graph-diameter = 4 • avg path length = 1.162 • avg degree = 19.278 32