There's a few peculiarities when sorting by Created Date, partly due to the fact that the system assigns Id values and time stamps in a way that may cause them to be out of order when queried back, and because the audit fields are truncated to the nearest second. However, if you want to ignore those idiosyncrasies and just go with a "good enough" answer, you might consider the following query:
return Database.getQueryLocator([SELECT Id FROM Lead ORDER BY CreatedDate, Id]);
While this isn't perfect, it does get leads in same order every time, so it's at least reproducible, but there's no guarantee that the records were literally created in that order (e.g. because of creatable audit field permissions, database race conditions/locks, etc).
The "scope" of Batchable's execute method will return the records in the same order in which they appear in the query results. In that sense, if the query above produces the results you expect, then the scope of each execute call will honor that same order. In other words, execute's scope will contain records from oldest to newest as defined by the query.