Lead Source is unfortunately left entirely up to us to populate. There aren't any attribution rules to automatically bucket people out of the box, the way it works in Google Analytics for example.
The good news is that you can clean, consistent lead source tracking set up using Marketo, but it takes a bit of work and time.
A whole implementation can be complex but here's a few general points to consider in addition to the tips Jeffrey mentioned. This is a broad overview but I thought it could be helpful in addressing the root of your question.
1) Define your Lead Sources: to have useful reports, you need to first consider all your acquisition activities and how you want to categorize them. This requires a bit of thinking. For example, do you want "Google Adwords" to be a lead source or just "Search Engine Marketing"?
2) Tag Your Links: Whenever you control the link, you should be adding parameters to the URL to identify where your users are coming from. E.g., www.campaignlink.com?leadsource=Search+Engine+Marketing. The best way to ensure lead source is captured accurately is to explicitly declare it.
3) Capture the URL Parameters when a Lead Becomes Known:This is the part Jeffrey is describing -- you need to add hidden fields to your forms that will look for the parameters on your leads and map those values to specific fields in Marketo/Salesforce. Read more on working with hidden fields.
I recommend capturing the URL parameters into a cookie when a lead first visits your site and then grabbing the stored parameters from the cookie upon registration. This ensures the data isn't lost even if a lead travels around or leaves then returns. You'll need a developer to help with that.
Alternately, you can set a default value for a hidden field on a particular form or declare this value on a list you are importing. So with your webinar example, you could set this value on a hidden field on your form so the leads are recognized as coming from a webinar when they register.
4) Create Smart Campaigns to Bucket Non-Campaign Visitors: People who visit from non-campaign sources (direct, organic search, organic social traffic etc.) won't have URL parameters on their links and so won't have a defined lead source.
You can set up campaigns with logic like, any leads with no lead source and who have a referring url containing Facebook, Twitter, LinkedIn etc., Lead Source = Organic Social (or whatever you choose). Same thing for search engines.
Anyone else gets bucketed as direct.